#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char ac[1001];
char times[10] = {0};
scanf("%s", ac);
int length = strlen(ac);
for(int i = 0; i < length; i++){
switch(ac[i]){
case '0' : times[0]++; break;
case '1' : times[1]++; break;
case '2' : times[2]++; break;
case '3' : times[3]++; break;
case '4' : times[4]++; break;
case '5' : times[5]++; break;
case '6' : times[6]++; break;
case '7' : times[7]++; break;
case '8' : times[8]++; break;
case '9' : times[9]++; break;
}
}
for(int i = 0; i < 10; i++){
if(times[i]){
printf("%d:%d\n", i, times[i]);
}
}
return 0;
}
// 首先看到题目输入:一个不超过1000位的正整数, 即想到不能用int输入;可以用字符串或者long -----
//然后呢, 我们用数组来存储每个字符出现的次数,即数组下标表示对应字符, 数组中的数值表示这个字符出现的次数。这样我们就通过两个数组,一个来存储输入,一个用来表述对应字符的对应出现的次数。
//还有一点要注意,我在做题时遇到的问题,我看到标准要求的输出最后一行没有换行符,而我在第一次做的时候使用了为了达到标准输出要求, 把它写得更复杂了,就是很复杂(以后要记得把每一次的代码都保存下来,而不是最后一次)。 这里可以设置一个问题:如果说要求最后一行没有换行符,而前面多行是要有换行的,我们该做些什么固定的基本操作,来达到这个目的。
// 我这里的switch似乎用的不漂亮,也似乎是有更好的办法 ------
#include<stdio.h>
int main()
{
long n;
int i;
static int a[10];
scanf("%ld",&n);
while(n)
{
a[n%10]++;
n/=10;
}
for(i=0;i<10;i++)
{
if(a[i]) printf("%d:%d\n",i,a[i]);
}
return 0;
}
// 以后尽量最简单的方法写, 不要怕错 , 这样才会快 。这里的a[n%10]++ 就是最好的例子。
// 以后应该知道的内容 : 自己的做题过程(错的与对的都要); 相应每种过程的思路 ; 经验与教训
// 2022/5/7