PAT乙级 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

结尾无空行

解题思路

题目中给的N的数据范围是1000,所以我们开辟一个大于1000的数组即可使用,但为了增加难度,我选择了另一种实现方式,即使用malloc创建出动态数组来实现。设计5个函数减少代码之间的耦合度,这5个函数分别对应题目中的5个要求,详细见代码

详细代码

#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
int is_a[5] = {0};
int N;
int a1(int a[]){
    int sum = 0,count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==0&&a[i]%2==0) {
            sum+=a[i];
        count++;
        }
    }
    if(count == 0) is_a[0] = 1;
    return sum;
}
int a2(int a[]){
    int sum = 0,p = 1,count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==1) {
            sum+=a[i]*p;
            p = -p;
            count++;
    }
    }
        if(count == 0) is_a[1] = 1;
        return sum;

}
int a3(int a[]){
    int count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==2) {
            count++;
    }
    }
    if(count == 0) is_a[2] = 1;
    return count;
    
}
float a4(int a[]){
    float sum = 0,count = 0;
    for(int i = 0;i<N;i++){
        if(a[i]%5==3) {
            sum+=a[i];
            count++;
    }
    }
     if(count == 0) is_a[3] = 1;
    return sum/count;
    
}
int a5(int a[]){
    int max = 0,count = 0;
     for(int i = 0;i<N;i++){
        if(a[i]%5==4) {
            if(a[i]>max) max = a[i];
            count++;
    }
    }
    if(count == 0) is_a[4] = 1;
    return max;
}
int main(){
    int n,*a;
    cin>>n;
    N = n;
    a = (int *)malloc(n*sizeof(int));
    for(int i = 0;i<n;i++){
        cin>>a[i];
    }
    a1(a);a2(a);a3(a);a4(a);a5(a);
        if(is_a[0]==1) cout<<"N ";
        else cout<<a1(a)<<" ";
    if(is_a[1]==1) cout<<"N ";
        else cout<<a2(a)<<" ";
    if(is_a[2]==1) cout<<"N ";
        else cout<<a3(a)<<" ";
    if(is_a[3]==1) cout<<"N ";
        else printf("%.1f ",a4(a));
    if(is_a[4]==1) cout<<"N";
        else cout<<a5(a);
    
}

猜你喜欢

转载自blog.csdn.net/weixin_45660485/article/details/119286773