PAT Basic 1012

来源:互联网 发布:英语句子分析软件 编辑:程序博客网 时间:2024/06/05 07:48

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>//ACusing 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;}
原创粉丝点击