PAT Basic 1012 数字分类 (20 分)

给定一系列正整数,请按要求对数字进行分类,并输出以下 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


#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n,temp,res1=0,res2=0,res3=0,res5=-1;double res4=0;
    cin>>n;
    vector<int> a1,a2,a3,a4,a5;
    for(int i=0;i<n;i++){
        cin>>temp;
        switch(temp%5){
            case 0: if(temp%10==0) a1.push_back(temp);break;
            case 1: a2.push_back(temp);break;
            case 2: a3.push_back(temp);break;
            case 3: a4.push_back(temp);break;
            case 4: a5.push_back(temp);break;
        }
    }
    //求和
    for(int i=0;i<a1.size();i++){
        res1+=a1[i];
    }
    //交错求和
    bool isPositive=true;//正负交错的key
    for(int i=0;i<a2.size();i++){
        if(isPositive) res2+=a2[i];
        else res2-=a2[i];
        isPositive=!isPositive;
    }
    //计数
    for(int i=0;i<a3.size();i++){
        res3++;
    }
    //平均数
    for(int i=0;i<a4.size();i++){
        res4+=a4[i];
    }
    res4=res4/a4.size();
    //最大数字
    for(int i=0;i<a5.size();i++){
        if(a5[i]>res5) res5=a5[i];
    }
    //输出,这边使用空判断更准确,否则会有一个失误
    if(a1.size()==0) cout<<"N ";else cout<<res1<<" ";
    if(a2.size()==0) cout<<"N ";else cout<<res2<<" ";
    if(a3.size()==0) cout<<"N ";else cout<<res3<<" ";
    if(a4.size()==0) cout<<"N ";else printf("%.1f ",res4);
    if(a5.size()==0) cout<<"N";else cout<<res5;
    system("pause");
    return 0;
}

 

posted @ 2019-07-31 03:43  SteveYu  阅读(188)  评论(0编辑  收藏  举报