本文主要是介绍PAT L1-003 个位数统计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目连接(点击这4个字)
刚开始自己的想法 就是输入N(这个N为int的数据类型) 然后通过while循环来分离N这个数的各个位子上的数 并存入数组a中 然后for循环来判断 每个位置上的数字 并使其在数组num中的相应下标加1 最后输出数组num中不为0的数的下标及其下标对应的数 写出的代码如下:
//此代码有误
#include<iostream>
#include<cstring>
int a[1000],num[10];
using namespace std;
int main()
{int N,i,len;while(cin>>N){i=0;while(N){a[i++]=N%10;N=N/10;}len=i;memset(num,0,sizeof(num));for(i=0;i<len;i++){if(a[i]==0) num[0]++;else if(a[i]==1) num[1]++;else if(a[i]==2) num[2]++;else if(a[i]==3) num[3]++;else if(a[i]==4) num[4]++;else if(a[i]==5) num[5]++;else if(a[i]==6) num[6]++;else if(a[i]==7) num[7]++;else if(a[i]==8) num[8]++;else if(a[i]==9) num[9]++;}for(i=0;i<=9;i++){if(num[i]!=0) cout<<i<<":"<<num[i]<<endl;}}return 0;
}
但是系统判定为部分正确
然后 自己也没有想出来错在哪里 就想着本来自己也用到了cstring这个头文件 就干脆定义为char型的数组a 这样不但可以省去分离N这个数的各个位子上的数 而且可以直接通过strlen函数求出a的长度len 结果就这样提交了一遍 过了!!!
附上通过的代码
#include<iostream>
#include<cstring>
char a[1000];
int num[10];
using namespace std;
int main()
{int i,len;gets(a);len=strlen(a);memset(num,0,sizeof(num));for(i=0;i<len;i++){if(a[i]=='0') num[0]++;else if(a[i]=='1') num[1]++;else if(a[i]=='2') num[2]++;else if(a[i]=='3') num[3]++;else if(a[i]=='4') num[4]++;else if(a[i]=='5') num[5]++;else if(a[i]=='6') num[6]++;else if(a[i]=='7') num[7]++;else if(a[i]=='8') num[8]++;else if(a[i]=='9') num[9]++;}for(i=0;i<=9;i++){if(num[i]!=0) cout<<i<<":"<<num[i]<<endl;}return 0;
}
然,自己并不理解 为什么换成char数据类型的就对了 第一次定义N为int 在分离 怎么就错了 这样使说明在分离N的各个位置上的数字出现了问题吗 但是自己接下来尝试把数组a打印出来 也并没有发现出错 还望路过的大神看见 指出来 不胜感激
这篇关于PAT L1-003 个位数统计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!