题目名称:计数问题
时间限制: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版权协议,转载请附上原文出处链接和本声明。