p1848 记数问题
题干描述
试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
输入格式
输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。
输出格式
输出共 1 行,包含一个整数,表示 x 出现的次数。
思路
起初一直想着有没有什么捷径来解答,想了半天也没发现什么简便的方法,转向使用穷举法。开始使用字符串来解答此题,但是需要使用字符串数组,比较麻烦,后来发现模运算非常方便,故答题如下
代码
1 int main(){ 2 int j,n,x,num=0; 3 scanf("%d %d",&n,&x); 4 for(int i=1;i<=n;i++){ 5 j=i; 6 while(j){ 7 if(j%10==x) 8 num++; 9 j/=10; 10 } 11 } 12 printf("%d",num); 13 return 0; 14 }
truobleshoot
第一次做题遇到一个“匪夷所思”的问题,感觉思路没有问题,但是程序一直不出结果,debug的时候发现死循环了
1 for(int i=1;i<=n;i++){ 2 while(i){ 3 if(i%10==x) 4 num++; 5 i/=10; 6 } 7 }
每次跳出while循环的时候i就会被重置成0,起初一直没发现问题所在,以为自己对for循环理解错了,仔细debug发现while使用的是for循环中的全局变量i,每次跳出while的时候i变量都会被重置。