龙空技术网

编程练习题第五天,C语言代码,算法竞赛入门,UVa1225

喵喵视角 211

前言:

眼前朋友们对“c语言晚安代码”大概比较关心,同学们都想要了解一些“c语言晚安代码”的相关文章。那么小编在网上网罗了一些有关“c语言晚安代码””的相关知识,希望咱们能喜欢,你们一起来了解一下吧!

原题

原题: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. Input 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. Output For each test case, write sequentially in one line the number of digit 0, 1, . . . 9 separated by a space. Sample Input 2 3 13 Sample Output 0 1 1 1 0 0 0 0 0 0 1 6 2 2 1 1 1 1 1 1翻译:把前n(n<=10000)个整数顺序写在一起:12345678910111213..数一数0-9各出现几次(输出十个数,分别是0,1,2...9的次数)。分析:

我们可以用n%10;n/=10的方法把从1到n个数字的每个包含的数字提取出来(关键),然后用i%10是否等于1-9其中的一个数字(1<=i<=9),可以用数组来记录,当i%10==k的时候,num[k]++,这样我们就可以把每个数字记录下来了。

代码:

#include <stdio.h>#include <string.h>int main(){	int T,n,i,j,num[15],k;	scanf("%d",&T);	while(T--)	{		scanf("%d",&n);		memset(num,0,sizeof(num)); //不要忘记每次读入n的时候要把num数组置为0		for(i=1;i<=n;i++)		{			j=i;			while(j)			{								for(k=0;k<=9;k++)					if(j%10==k) 					{num[k]++;  					break;  //如果找到了相等的数字就跳出循环吧。					}				j/=10;			}		}		for(i=0;i<9;i++)			printf("%d ",num[i]);		printf("%d\n",num[9]);	}		return 0;}

AC

陌生的人晚安!

标签: #c语言晚安代码