枚举法
看完题第一反应是要用字符串进行判断,但舍友这么做的很麻烦。
又想了想最大数不超10000,所以可以用数值每位数提取的方法,将0~9作为num下标,元素值代表个数,将提取出来的每位数作为num下标将此元素累加,最后输出num[i]。
如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int m,n,i;
scanf("%d",&m);
while(m--)
{
int num[10]={0};
scanf("%d",&n);
for (i=1;i<=n;i++)
{
if (i<10)//一位数
num[i]++;
else if (i<100)//两位数
{
num[i/10]++;
num[i%10]++;
}
else if (i<1000)
{
num[i/100]++;
num[(i/10)%10]++;
num[i%10]++;
}
else if (i<10000)
{
num[i/1000]++;
num[(i/100)%10]++;
num[(i/10)%10]++;
num[i%10]++;
}
}
for (i=0;i<=9;i++)
{
if (i==0) printf("%d",num[0]);
else printf(" %d",num[i]);
}
printf("\n");
}
return 0;
}