PAT乙级–1021 个位数统计
题目描述
输入样例:
100311
输出样例:
0:2
1:3
3:1
实现代码如下
实现代码一:
```c
#include<stdio.h>
#define N 1000
int count(int *a,int n)
{
int i=0;
int num=n;
if(num==0)
{
return 1;
}
for(int j=0;j<N;j++)
{
i++;
if(num==0)
{
break;
}
a[j]=num%10;
num/=10;
}
return i-1;
}
int main(void)
{
int n;
scanf("%d",&n);
if(n==0)
{
printf("0:1\n");
}
else{
int a[N];
int num=count(a,n);
int g[10];
for(int i=0;i<10;i++)
{
g[i]=0;
}
for(int i=0;i<num;i++)
{
g[a[i]]++;
}
for(int i=0;i<10;i++)//输出部分
{
if(g[i]!=0)
{
printf("%d:%d\n",i,g[i]);
}
}
}
}
实现代码一的平台测试结果
思考:
可能是类似000这样的测试案例无法正确通过。于是将输入改为字符串输入,再进行对字符串的处理,得到实现代码二。
实现代码二
#include<stdio.h>
#include<string.h>
#define N 1000
int count(char *a)//求出字符串长度的函数
{
int i=0;
while(a[i++]!='\0');
return i-1;
}
int main(void)
{
char a[N];
scanf("%s",&a);
int g[10];
for(int i=0;i<10;i++)
{
g[i]=0;
}
int num=count(a);
// int num2= strlen(a); 或者是利用string文件库内的函数strlen()求出字符串长度
for(int i=0;i<num;i++)
{
g[((int)a[i]-'0')]++;
}
for(int i=0;i<10;i++)//输出部分
{
if(g[i]!=0)
{
printf("%d:%d\n",i,g[i]);
}
}
}
实现代码二平台测试结果
学习收获
1.需要考虑到测试的多样性。
2.对于输入数字的处理,字符和数字有些许不同,需要额外考虑。