PAT乙级练习题.1012

PAT.1012 数字分类


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

需要注意一种情况:

例如输入

4 6 6 6 6

此时,数字A2计算结果为0,若是输出时判断数字为0即输出N那么输出结果为N N N N N显然是错误的,正确输出应该为N 0 N N N
因此不能只以最终结果为判断依据

示例代码:

#include<iostream>
using namespace std;
int main(void){
    int n;
    float A[5]={0};
    int a4=0;
    int b[5]={0};//与计算结果综合判断最后输出
    cin>>n;
    int *num=new int[n];

    for(int i=0;i<n;i++)
        cin>>num[i];

    for(int i=0,j=1;i<n;i++){
        switch(num[i]%5){
            case 0:
                if(num[i]%2==0){
                    b[0]++; 
                    A[0]+=num[i];
                }
                break;
            case 1:
                b[1]++;
                if(j){
                    A[1]+=num[i];
                    j=0;
                }   
                else{
                    A[1]-=num[i];
                    j=1;
                }
                break;
            case 2:
                b[2]++;
                A[2]++;
                break;
            case 3:
                b[3]++;
                A[3]+=num[i];
                a4++;
                break;
            case 4:
                b[4]++;
                if(num[i]>A[4]){
                    A[4]=num[i];
                }
                break;      
        }
    }

    if(A[3])
        A[3]=(float)((int)(A[3]*10/a4+0.5))/10; 

    for(int i=0;i<5;i++){
        if(i!=0)
            cout<<" ";
        if(A[i])
            cout<<A[i];
        else if(b[i])
            cout<<"0";
        else cout<<"N";
    }

    delete num;
    return 0;
} 

猜你喜欢

转载自blog.csdn.net/death__moon/article/details/80428033