#学习思路#
题目:小明对数位中含有2,0,1,9的数字很感兴趣(不包括前导0)
在1到40中这样的数包括1,2,9,10,至32,39和40,共28个,他们的和是574。
请问,在1到n中,所有这样的数的和是多少?
解答:我们做题首先要有一个方向明确思路>定义函数>找出去区间数>判断条件是否成立>输出
在我们解答出这道真题首先要有一个明确的思路,即:题目中要求含有2,0,1,9这四个数从1到n的总和——>定义两个变量,即int n=0;int sum=0;
因为我们的n是未知数,所以就要引用库函数scanf从键盘上输入数字,那就是——>scanf(“%d”,&n);
题目明确规定不包含前导0,那么从就需要从1开始,则这些数的范围区间就是1 — n,所以我们定义一个循环语句来表示这个区间的数。
即:for(int i=1;i<=n;i++)<— 我们的i可以看作一个循环的次数,这个次数不超过范围限制,因为我们找的是区间内的数字,则这个区间就是有一定的限制范围的,那么我们定义i<=n;。
现在我们找到了1-n这个区间的数字,我们就要判断这些数字的各个位数是否有2,0,1,9这四个数字中的其中一个数字。那么我们创建一个循环分支来判断这些数字是否成立。
因为我们要在这些数字中查找,我们还需要在则个循环中嵌套一个循环,做判断。
前提:首先定义int m=i;(因为我们m为i的话肯定是真,所以进入下一个循环)
即: for( ;m ; )<--这里当我们的m为真(则非零),那么我们for循环里面的语句就是用来判断每个数的各位数是否有等于2,0,1,9这四个数的。
即:int num=m%10;<-——定义一个变量存放它们的余数,用余数来判断是否是2,0,1,9.
我们已经查找了他的第一个位数,那我们需要查找他第二个位数的话,则写得:m=m/10;则来到这个位数的第二位。
之后只需要判断一下如果上面的数字都在这个条件范围内那么就进入下面的判断条件,即:
if(num==1 || num==2 || num==0 || num==9);
因为我们要求他的总和,所以在if语句下面存放我们开始定义好的变量sum用来存放每次循环后的值相加的和,则sum=sum+i;最后m=0;是为了避免像29这种含有两个的重复计算。
等到这一步第一个for循环循环完成之后跳出循环打印出我们的总和,即:printf(“%d”,sum);
最后return 0;返回到整形