题目:

题目描述:

题目链接:

好数

思路:

第一种思路详解:

因为每次检查数都是从个位开始,所以对于每一个数都是先检查奇数位再检查偶数位,即存在先检查奇数位再检查偶数位的循环。注意一次完整的循环是先检查奇数位再检查偶数位,所以在检查完奇数位后删去这一位可能temp就已经为0了,此时就应该马上退出,否则接着判断偶数位但是0也是偶数就会出错。所以在判断奇数位后删去这一位要对temp补上判断才能继续检查偶数位

这是我第一次做这题的思路,现在想想确实有点绕,但是我当时就是这么做出来的

第二种思路详解:

第二种思路会比第一种更好理解

先计算输入的数是几位数,用cnt来记录这个数的位数。然后j从第一位开始遍历第cnt位,用j可以判断当前是奇数位还是偶数位,然后对应判断奇数位是否是奇数,判断偶数位是否是偶数即可

代码:

第一种思路代码详解:

#include<bits/stdc++.h>    //万能头 
using namespace std;

int main()
{
	int n;    //题目给的是10^7,一开始打算开long long,后面百度搜int的范围是-2^31~2^31-1 
	cin>>n;   //int的范围大约相当于10^9,所以不开long long也可以 
	int i;
	int count=0;
	for(i=1;i<=n;i++)
	{
		int flag=1;  //flag=1表示好数,flag=0表示不是好数 
		int temp=i;//定义临时变量,因为temp会变化,若用i则while结束后i=0与循环的i=1矛盾,没结果 
		while(temp!=0)   //因为都是从个位开始检查,存在先检查奇数位再检查偶数位的循环 
		{
			if(temp%2==1)  //先检查奇数位,若是奇数才继续检查 
			{
				temp/=10;  //末尾删去一位 
				if(temp!=0&&temp%2==1) //末尾删去一位后还存在偶数位且偶数位为奇数,判断不是好数 
				{
					flag=0;
					break;
				}
				else  //末尾删去一位后不存在偶数位,比如1,3,5或偶数位为偶数则继续 
				{
					temp/=10; //每判断完一位就要末尾删去一位,一开始忘了这句,debug发现11不行 
					continue; //回到while的判断语句,像1,3,5这样的就退出while循环 
				}
			}
			else           //奇数位不是奇数就直接判断不是好数并break退出while循环 
			{
				flag=0;
				break;
			}
		}
		if(flag==1)
		{
			count++;
		}
	}
	cout<<count<<endl;
	return 0;
}

第二种思路代码详解:

#include<bits/stdc++.h> //思路与第一次做的时候不太一样,第一次是先检查奇数位(个位开始)再检查偶数位 
using namespace std;//而检查奇数位时要检查是否有下一位及下一位是否是奇数,循环结束是看temp是否到0 
                    //而这次二刷是先算每个数的位数,然后从第一位开始遍历 
int main()
{
	int n;
	int ans=0;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int cnt=0;  //定义cnt为数的位数 
		int temp1=i;
		while(temp1!=0)
		{
			temp1/=10;
			cnt++;
		}
		int flag=1;  //flag为1表示是好数,为0表示不是好数 
		int temp2=i;
		for(int j=1;j<=cnt;j++) //从第一位开始遍历 
		{
			if(j%2==1) //判断是奇数位 
			{
				if(temp2%2==1)
				{
					temp2/=10;
					continue;
				}
				else
				{
					flag=0;
					break;
				}
			}
			if(j%2==0) //判断是偶数位 
			{
				if(temp2%2==0)
				{
					temp2/=10;
					continue;
				}
				else
				{
					flag=0;
					break;
				}
			}
		}
		if(flag==1)
		{
			ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐