【2024蓝桥B组】好数
好数
题目


题目分析
1.蓝桥杯不怕麻烦的,一般可以选择用long long int 替换int,防止数据过大
2.这道题不怕麻烦的话,可以直接暴力解,用多个if语句进行判断即可
3.想要美观点的,就进行数位判断
4.这道题就一个关键点:奇数位对奇数,偶数位对偶数
代码1
#include <iostream>
using namespace std;
int a[10001];
int ans=0;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
if(i<10&&i%2!=0)
ans++;
if(i>=10&&i<100&&(i%10)%2!=0&&(i/10)%2==0)
ans++;
if(i>=100&&i<1000&&i%10%2!=0&&i%100/10%2==0&&i/100%2!=0)
ans++;
if(i>=1000&&i<10000&&i%10%2!=0&&i%100/10%2==0&&i%1000/100%2!=0&&i/1000%2==0)
ans++;
if(i>=10000&&i<100000&&i%10%2!=0&&i%100/10%2==0&&i%1000/100%2!=0&&i%10000/1000%2==0&&i/10000%2!=0)
ans++;
if(i>=100000&&i<1000000&&i%10%2!=0&&i%100/10%2==0&&i%1000/100%2!=0&&i%10000/1000%2==0&&i%100000/10000%2!=0&&i/100000%2==0)
ans++;
if(i>=1000000&&i<10000000&&i%10%2!=0&&i%100/10%2==0&&i%1000/100%2!=0&&i%10000/1000%2==0&&i%100000/10000%2!=0&&i%1000000/100000%2==0&&i/1000000%2!=0)
ans++;
}
cout<<ans;
return 0;
}
代码2
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;cin >> a;//输入的整数
int ans = 0;//输出的结果
for(int i = 1;i <= a; ++ i)//枚举从1到a所有数
{
int cnt = 1;//用来记录奇数位还是偶数位
int flag = 1;//用来判断是否好数的标记
int rec = i;//获得i值取出各个位置的值进行判断
while(rec)
{
int j = rec % 10;//取出最后一位
if(cnt % 2 == 1)//若奇数位
{
if(j % 2 != 1)//若奇数位不为奇数
{
flag = 0;
}
}
if(cnt % 2 == 0)//若偶数位
{
if(j % 2 != 0)//若偶数位不为偶数
{
flag = 0;
}
}
cnt ++;//第几位增加(从后往前)
rec /= 10;//去掉最后一位
}
if(flag == 1)ans ++;//判断是否好数
}
cout << ans;//输出答案
return 0;
}

浙公网安备 33010602011771号