PAT乙级1012——数字分类
题目:
题目详情 - 1012 数字分类 (20 分) (pintia.cn)
这道题比较简单,就是按照数字除5的余数把数字分类,再在各个类下对数字做相应的操作——用的是switch结构。当然,普通if语句也是可以的
注意题目这句话很重要:若其中某一类数字不存在,则在相应位置输出 N
看了一下这个哥们的,没有搞清楚用数组的意义是什么:PAT乙级1012 - 臭咸鱼 - 博客园 (cnblogs.com)
我原本的代码是:只过了两个测试点,然而我没有找出问题在哪:
#include <iostream> #include <iomanip> using namespace std; int main() { int N; cin>>N;//需要处理的数字的个数 int a1=0,a2=0,a3=0,a5=0; float a4=0; int num; int sign=1; int time=0; for (int i=0;i<N;i++) { cin>>num; int remainder=num%5; switch(remainder) { case 0: //能够被5整除 if(num%2==0)//是偶数 { a1+=num; } break; case 1: a2+=sign*num; sign=-sign; break; case 2: a3+=1; break; case 3: a4+=num; time+=1; break; case 4: if (num>a5) { a5=num; } break; } } cout<<a1<<' '<<a2<<' '<<a3<<' '; cout<<fixed<<setprecision(1)<<a4/time<<' '; cout<<a5; return 0; }
再次审题之后,原来是没有做“异常处理”:要注意当某一类数字不存在的时候,要输出N——我们怎么知道某一类数字存不存在呢?很容易想到的是:再分别设置五个变量,来储存每一个类中有没有数字被归入为这一类。下面是AC的代码:
#include <iostream> #include <iomanip> using namespace std; int main() { int N; cin>>N;//需要处理的数字的个数 int a1=0,a2=0,a3=0,a5=0; float a4=0; int a1c=0,a2c=0,a3c=0,a4c=0,a5c=0; int num; int sign=1; int time=0; for (int i=0;i<N;i++) { cin>>num; int remainder=num%5; switch(remainder) { case 0: //能够被5整除 if(num%2==0)//是偶数 { a1+=num; a1c++; } break; case 1: a2+=sign*num; sign=-sign; a2c++; break; case 2: a3+=1; a3c++; break; case 3: a4+=num; time+=1; a4c++; break; case 4: if (num>a5) { a5=num; } a5c++; break; } } if (a1c>0) cout<<a1<<' '; else cout<<"N"<<' '; if (a2c>0) cout<<a2<<' '; else cout<<"N"<<' '; if (a3c>0) cout<<a3<<' '; else cout<<"N"<<' '; if (a4c>0) cout<<fixed<<setprecision(1)<<a4/time<<' '; else cout<<"N"<<' '; if (a5c>0) cout<<a5; else cout<<"N"; return 0; }
虽然这样看代码有一点又臭又长,但是目前还没有想出有什么更简单的方法。就这样。
本文来自博客园,作者:EowynTang,转载请注明原文链接:https://www.cnblogs.com/tangcoder/p/15670156.html

浙公网安备 33010602011771号