PAT Basic 1012. 数字分类 (20)
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:
A1 = 能被5整除的数字中所有偶数的和;
A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4…;
A3 = 被5除后余2的数字的个数;
A4 = 被5除后余3的数字的平均数,精确到小数点后1位;
A5 = 被5除后余4的数字中最大数字。
输入格式:
每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出“N”。
输入样例1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出样例1:
30 11 2 9.7 9
输入样例2:
8 1 2 4 5 6 7 9 16
输出样例2:
N 11 2 N 9
解答:一个数组cal[6]初始全置为0,cal[i]=1分别表示A1, A2, A3, A4, A5是否经过计算, 用于在最后判断cal[i]==0来输出’N’或是对应的A1, A2, A3, A4, A5
#include <iostream>
#include <iomanip>
#include <cstring>
//AC
using namespace std;
int main(){
int n, x, mod;
cin>>n;
int f=1, cnt=0;
int a1, a2, a3, a5;
a1=a2=a3=a5=0;
double a4;
a4=0;
int cal[6];
memset(cal, 0, sizeof(cal));
for(int i=0;i<n;i++){
cin>>x;
mod=x%5;
switch (mod){
case 0:
if(x%2==0){
cal[1]=1;
a1=a1+x;
}
break;
case 1:
cal[2]=1;
a2=a2+f*x;
f=-f;
break;
case 2:
cal[3]=1;
a3++;
break;
case 3:
cal[4]=1;
a4=a4+x;
cnt++;
break;
case 4:
cal[5]=1;
if(a5<x) a5=x;
break;
}
}
if(cnt) a4=a4/cnt;
if(cal[1]==0) cout<<"N"<<" ";
else cout<<a1<<" ";
if(cal[2]==0) cout<<"N"<<" ";
else cout<<a2<<" ";
if(cal[3]==0) cout<<"N"<<" ";
else cout<<a3<<" ";
if(cal[4]==0) cout<<"N"<<" ";
else cout<<fixed<<setprecision(1)<<a4<<" ";
if(cal[5]==0) cout<<"N"<<endl;
else cout<<a5<<endl;
return 0;
}