题目描述:
Trung is bored with his mathematics homeworks.
He takes a piece of chalk and starts writing a sequence of consecutive integers starting with 1 to N (1 < N < 10000).
After that, he counts the number of times each digit (0 to 9) appears in the sequence. For example, with N = 13, the sequence is: 12345678910111213
In this sequence, 0 appears once, 1 appears 6 times, 2 appears 2 times, 3 appears 3 times, and each digit from 4 to 9 appears once. After playing for a while, Trung gets bored again.
He now wants to write a program to do this for him. Your task is to help him with writing this program.
输入格式:
The input file consists of several data sets. The first line of the input file contains the number of data sets which is a positive integer and is not bigger than 20. The following lines describe the data sets.
For each test case, there is one single line containing the number N.
输出格式:
For each test case, write sequentially in one line the number of digit 0, 1, . . . 9 separated by a space.
输入输出样例:
输入
2
3
13
输出
0 1 1 1 0 0 0 0 0 0
1 6 2 2 1 1 1 1 1 1
坑点提示:
输出时行末不能有空格!!!
害得我交了好多次
分析:
此题是让我们求1…n组成的字符串中0,1,2,3…9 一共出现了多少次。所以我们可以设一个a数组,用来存放0…9出现的次数。每次从一开始枚举,枚举到的i用下面这个程序求出它的各位数字是多少:
int s=i;
while(s>0)
{
a[s%10]++;
s/=10;
}
最后我们直接输出0…9出现的次数就行啦~
(记得清零哦)
代码:
#include<bits/stdc++.h>
using namespace std;
int T;
int n;
int a[20];
int main()
{
cin>>T;
while(T--)
{
cin>>n;
memset(a,0,sizeof(a));//清空数组
for(int i=1;i<=n;i++)
{
int s=i;
while(s>0)
{
a[s%10]++;
s/=10;
}
}
for(int i=0;i<=9;i++)
{
cout<<a[i];
if(i<9)
{
cout<<" ";//当i==9时不能输出空格
}
}
cout<<endl;//换行
}
return 0;
}
结束啦~~~