【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;	
} 

  

posted @ 2024-04-16 18:38  山远尽成云  阅读(206)  评论(0)    收藏  举报