3-3 「UVa1225」數(shù)數(shù)字:
把前n(n<=1000)個整數(shù)順次寫在一起:89101112...數(shù)一數(shù)09各出現(xiàn)多少次(輸出10個整數(shù)叽赊,分別是09出現(xiàn)的次數(shù))
代碼
#include<stdio.h>
#include<string.h>
#define maxn 100000 //由于N<=1000所以數(shù)組要開大,要存10000個數(shù)字酿矢。 否則re
void makes(int n,char *s)
{
char temp[10];
for(int i=1;i<=n;i++){
sprintf(temp,"%d",i); //int型賦值給char型數(shù)組用sprintf函數(shù)
strcat(s,temp);
}
//printf("%s\n",s);
}
int main()
{
int t,n,count[10];
char s[maxn];
scanf("%d",&t);
while(t--){
int tot=0;
memset(count,0,sizeof(count));
memset(s,0,sizeof(s));
scanf("%d",&n);
makes(n,s);
for(int d=0;d<=9;d++){
for(int i=0;i<strlen(s);i++){
if(s[i]-'0'==d) count[d]=++tot;
}
printf("%d",count[d]);
if(d!=9) printf(" ");
else printf("\n");
tot=0;
}
}
return 0;
}
簡化版:
#include<stdio.h>
#include<string.h>
#define N 100000
char s[N],temp[10];
int count[10];
int main()
{
int t,n,i;
scanf("%d",&t);
while(t--)
{
memset(count,0,sizeof(count));
memset(s,0,sizeof(s));
scanf("%d",&n);
for(i=1;i<=n;i++){
sprintf(temp,"%d",i);
strcat(s,temp);
}
for(i=0;i<strlen(s);i++)
count[s[i]-'0']++; //相應(yīng)位置的數(shù)字累加上去
for(i=0;i<10;i++){
printf("%d",count[i]);
if(i!=9) printf(" ");
else printf("\n");
}
}
return 0;
}
- 注意
- 輸出格式每個答案之間要空一行