之前有个高中同学在群里发了道题目,应该是他弟弟的作业,原题如下:0到1000的自然数中,有一个数字出现了301次,请问:这个数字是几?
看完之后,我突然心血来潮,决定用刚学的C语言试试,效果图如下
代码如下,希望对你有帮助
#include<stdio.h>
#include<stdlib.h>
void shuju(int q)//定义一个函数,功能为在0~9999之间取一个数,然后求出0到该数之间每个数字出现的次数
{int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,m;//a表示1出现的次数,b表示2出现的次数,以此类推
for(m=0;m<=q;m++)
{
switch(m%10)//判断个位
{case 1:a++;break;
case 2:b++;break;
case 3:c++;break;
case 4:d++;break;
case 5:e++;break;
case 6:f++;break;
case 7:g++;break;
case 8:h++;break;
case 9:i++;break;
case 0:j++;break;}
if(m>9)
{switch((m/10)%10)//判断十位
{case 1:a++;break;
case 2:b++;break;
case 3:c++;break;
case 4:d++;break;
case 5:e++;break;
case 6:f++;break;
case 7:g++;break;
case 8:h++;break;
case 9:i++;break;
case 0:j++;break;}}
if(m>99)
{switch(m/100)//判断百位
{case 1:a++;break;
case 2:b++;break;
case 3:c++;break;
case 4:d++;break;
case 5:e++;break;
case 6:f++;break;
case 7:g++;break;
case 8:h++;break;
case 9:i++;break;
case 0:j++;break;}
}
if(m>999)
{switch((m/100)/10)//判断千位
{case 1:a++;break;
case 2:b++;break;
case 3:c++;break;
case 4:d++;break;
case 5:e++;break;
case 6:f++;break;
case 7:g++;break;
case 8:h++;break;
case 9:i++;break;
case 0:j++;break;}
}
}
printf("“1”出现%d次 “2”出现%d次 “3”出现%d次 “4”出现%d次 “5”出现%d次\n",a,b,c,d,e);
printf("“6”出现%d次 “7”出现%d次 “8”出现%d次 “9”出现%d次 “0”出现%d次\n",f,g,h,i,j);//输出
return ;}
void main()
{
int p;
printf("请输入一个自然数:");
scanf("%d",&p);//通过键盘输入一个数
shuju(p);//调用函数
system("pause");
}