个位数统计pat-1021

来源:互联网 发布:淘宝联盟返现 编辑:程序博客网 时间:2024/06/06 03:38

给定一个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:21:3

3: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]);}