PAT 1012デジタル分類(PythonとC)

23055 ワード

単純シミュレーション
一連の正の整数を与えて、要求通りに数字を分類して、以下の5つの数字を出力してください:A 1=5で割り切れる数字の中のすべての偶数の和;A 2=5で除算された残りの1の数字を与えられた順序でインタリーブして和を求める、すなわちn 1−n 2+n 3−n 4⋯;A 3=5で除算された残りの2の数字の個数;A 4=5で除算された残りの3の数字の平均数は、小数点以下の1桁まで正確である.A 5=5で除算された残り4の数字のうち最大数.
入力形式:
各入力には1つのテスト例が含まれています.各試験例は、まず1000を超えない正の整数Nを与え、次いで、Nが1000を超えない分類される正の整数を与える.数字の間はスペースで区切られています.
出力フォーマット:
与えられたN個の正の整数に対して、A 1 A 5を問題の要求に従って計算し、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
主な考え方
これも簡単なシミュレーションの問題ですが、判断文が少し多いので、少し複雑に見えます.次の点に注意してください.
  • 出力には出力個数と出力平均値があるので、2つの配列、1つの記憶個数、1つの計算和を使用することができます.
  • その他は単純な判断であり、最後の出力は個数が0であるか否かを判断することで要素があるか否かを判断することができ、N
  • を出力する.
  • Pythonコードが最も強力なのはそのライブラリであり、合理的に利用すれば多くの精力を節約することができ、後でPythonは書けないかもしれない.ブロガーはシロとして、これらのライブラリに対する理解が限られているため、書かれたコードの最適化が足りないので、ブロガーはまずPythonをよく勉強しなければならない.

  • cコード
    #include
    int main()
    {
        int n;
        scanf("%d",&n);
        int out[5]={0};
        int i;
        int count[5]={0};
        int read;
        for(i=0;i<n;i++)
        {
            scanf("%d",&read);
            if(read%5==0)
            {
                if(read%2==0)
                {
                    out[0]+=read;
                    count[0]++;
                }
            }
            else if(read%5==1)
            {
                if(count[1]%2==0)
                {
                    out[1]+=read;
                }
                else
                {
                    out[1]-=read;
                }
                count[1]++;
            }
            else if(read%5==2)
            {
                count[2]++;
            }
            else if(read%5==3)
            {
                out[3]+=read;
                count[3]++;
            }
            else
            {
                if(read>out[4])
                {
                    out[4]=read;
                }
                count[4]++;
            }
        }
        if(count[0]==0)
            printf("N ");
        else
            printf("%d ",out[0]);
        if(count[1]==0)
            printf("N ");
        else
            printf("%d ",out[1]);
        if(count[2]==0)
            printf("N ");
        else
            printf("%d ",count[2]);
        if(count[3]==0)
            printf("N ");
        else
            printf("%.1f ",(double)out[3]/count[3]);
        if(count[4]==0)
            printf("N");
        else
            printf("%d",out[4]);
    }
    

    pythonコード
    lst = list(map(int, input().split()))
    n = lst[0]
    lst.remove(n)
    
    sum= [0]*5
    count=[0]*5
    for num in lst:
        if num % 10 == 0:
            sum[0] += num
        elif num % 5 == 1:
            sum[1] += (-1) ** count[1] * num
            count[1]+=1
        elif num % 5 == 2:
            sum[2] += 1
        elif num % 5 == 3:
            count[3] += 1
            sum[3] += num
        elif num % 5 == 4:
            sum[4] = max(sum[4], num)
    
    if count[3] == 0:
        sum[3] = "N"
    else:
        sum[3] = str(round(sum[3] / count[3], 1))
    if count[1] == 0:
        sum[1] = "N"
    else:
        sum[1] = str(sum[1])
    for i in [0, 2, 4]:
        if sum[i] == 0:
            sum[i] = "N"
        else:
            sum[i] = str(sum[i])
    
    out = " ".join(sum)
    print(out)