CSDN每日一练计数问题 C语言

题目名称:计数问题
时间限制:1000ms内存限制:256M
题目描述
试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9) 共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。

输入描述:
2 个整数 n,x ,之间用一个空格隔开。

输出描述:
1 个整数,表示 x 出现的次数。

示例
示例1
输入

11 1

输出

4

思路:我们只要循环,然后每次判断一下他的每位上得数是多少,只要符合,我们就算找到一个该数字x,那么我们总和就+1,知道判断完,我们就知道有多少数是符合的然后输出出来。
代码如下(编译器是dev,语言是C语言):

#include <stdio.h>
#include<stdbool.h>
int x,n,i,ge,shi,bai,qian,wan,sum = 0;
int main(){
    scanf("%d %d",&n,&x);
    for(i = 1;i<=n;i++){
        if(i<10){
            if(i == x){
                sum++;
            }
        }else if(i<100){
            ge = i%10;
            shi = (i/10)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
        }else if(i<1000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
        }else if(i<10000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
        }else if(i<100000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            wan = (i/10000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
            if(wan == x){
                sum++;
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}

在这里插入图片描述

后来发现不通过,仔细想想代码没有问题呢,然后觉得是不是数组设置小了,然后我们就增大数字的大小,下面就得到正确答案了。

#include <stdio.h>
#include<stdbool.h>
int x,n,i,ge,shi,bai,qian,wan,shiwan,baiwan,qianwan,sum = 0;
int main(){
    scanf("%d %d",&n,&x);
    for(i = 1;i<=n;i++){
        if(i<10){
            if(i == x){
                sum++;
            }
        }else if(i<100){
            ge = i%10;
            shi = (i/10)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
        }else if(i<1000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
        }else if(i<10000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
        }else if(i<100000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            wan = (i/10000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
            if(wan == x){
                sum++;
            }
        }else if(i<1000000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            wan = (i/10000)%10;
            shiwan = (i/100000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
            if(wan == x){
                sum++;
            }
            if(shiwan == x){
                sum++;
            }
        }else if(i<10000000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            wan = (i/10000)%10;
            shiwan = (i/100000)%10;
            baiwan = (i/1000000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
            if(wan == x){
                sum++;
            }
            if(shiwan == x){
                sum++;
            }
            if(baiwan == x){
                sum++;
            }
        }else if(i<100000000){
            ge = i%10;
            shi = (i/10)%10;
            bai = (i/100)%10;
            qian = (i/1000)%10;
            wan = (i/10000)%10;
            shiwan = (i/100000)%10;
            baiwan = (i/1000000)%10;
            qianwan = (i/10000000)%10;
            if(ge == x){
                sum++;
            }
            if(shi == x){
                sum++;
            }
            if(bai == x){
                sum++;
            }
            if(qian == x){
                sum++;
            }
            if(wan == x){
                sum++;
            }
            if(shiwan == x){
                sum++;
            }
            if(baiwan == x){
                sum++;
            }
            if(qianwan == x){
                sum++;
            }
        }
    }
    printf("%d\n",sum);
    return 0;
}

在这里插入图片描述


版权声明:本文为weixin_43708800原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。