给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。
输入格式:
每个输入包含1个测试用例,即一个不超过1000位的正整数N。
输出格式:
对N中每一种不同的个位数字,以D:M的格式在一行中输出该位数字D及其在N中出现的次数M。要求按D的升序输出。
输入样例:100311
输出样例:
0:2 1:33:1
题意:给你一段字符串,统计字符串中每个数字的个数,从小到大输出。
我的思路:首先输入一个字符串,然后for循环遍历整个字符串,计算出字符串中每个字符的数量,
然后当数量不为零时,按顺序输出。
(然后附上我的代码,这题写了100+行,然后被叶学长无情的嘲讽了,接下来是他A的代码,只有20行呦)
#include <stdio.h> #include <string.h> int main() { char a[1005]; scanf("%s",a); int len1=strlen(a); int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,sum6=0,sum7=0,sum8=0,sum9=0,sum=0; for(int i=0;i<len1;i++) { if(a[i]=='0') { sum1++; } if(a[i]=='1') { sum2++; } if(a[i]=='2') { sum3++; } if(a[i]=='3') { sum4++; } if(a[i]=='4') { sum5++; } if(a[i]=='5') { sum6++; } if(a[i]=='6') { sum7++; } if(a[i]=='7') { sum8++; } if(a[i]=='8') { sum9++; } if(a[i]=='9') { sum++; } } if(sum1!=0) { printf("0:%d\n",sum1); } if(sum2!=0) { printf("1:%d\n",sum2); } if(sum3!=0) { printf("2:%d\n",sum3); } if(sum4!=0) { printf("3:%d\n",sum4); } if(sum5!=0) { printf("4:%d\n",sum5); } if(sum6!=0) { printf("5:%d\n",sum6); } if(sum7!=0) { printf("6:%d\n",sum7); } if(sum8!=0) { printf("7:%d\n",sum8); } if(sum9!=0) { printf("8:%d\n",sum9); } if(sum!=0) { printf("9:%d\n",sum); } return 0; }
接下来是大神的代码:
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int sum[10]; char str[1005]; int main( ) { memset(sum,0,sizeof(sum)); cin >> str; int len = strlen(str); for(int j = 0; j < len; j++) sum[str[j] - '0']++; for(int j = 0; j < 10; j++) if(sum[j] != 0) printf("%d:%d\n",j,sum[j]); }