PATグレードB1012デジタル分類(20ポイント)

トピックコンテンツ

一連の正の整数を指定して、必要に応じて数値を並べ替え、次の5つの数値を出力します。

  • A1=5で割り切れるすべての偶数の合計;
  • A2 =数値の合計をインターリーブし、指定された順序で5で除算した後に1を残します。つまり、n1 −n2 + n3 −n4…を計算します。
  • A3=5で割った後に2が残っている桁数。
  • A4 = 5で割った後の余り3の桁の平均で、小数点以下1桁まで正確です。
  • A5=5で割ったときに余りが4になる数の最大数。

入力フォーマット:

各入力には1つのテストケースが含まれます。各テストケースには、1000までの正の整数Nが与えられ、その後に1000までのN個の正の整数が分類されます。数字はスペースで区切られます。

出力フォーマット:

与えられたN個の正の整数について、質問の必要に応じてA1〜A5を計算し、それらを1行に順番に出力します。数字はスペースで区切られますが、行末に余分なスペースがあってはなりません。

いずれかの種類の数値が存在しない場合は、対応する位置に出力され 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