1. 程式人生 > >PAT 乙級 1012 (方法 + 程式碼)

PAT 乙級 1012 (方法 + 程式碼)

1012 數字分類 (20 分)

給定一系列正整數,請按要求對數字進行分類,並輸出以下 5 個數字: A​1 = 能被 5 整除的數字中所有偶數的和; A2 = 將被 5 除後餘 1 的數字按給出順序進行交錯求和,即計算 n1​ −n2+n​3​​ −n​4​​ ⋯; A​3 = 被 5 除後餘 2 的數字的個數; A4 = 被 5 除後餘 3 的數字的平均數,精確到小數點後 1 位; A5 = 被 5 除後餘 4 的數字中最大數字。

輸入格式:

每個輸入包含 1 個測試用例。每個測試用例先給出一個不超過 1000 的正整數 N,隨後給出 N 個不超過 1000 的待分類的正整數。數字間以空格分隔。

輸出格式:

對給定的 N 個正整數,按題目要求計算 A​1​​ ~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

解題思路:

C++版

簡單粗暴,非常直白的寫法

#include<iostream>//23.15
#include<stdlib.h>

using namespace std;

int main
() { int n; cin>>n; float a4; int num,a5 = 0,sum = 0,a3 = 0,a2 = 0,a1 = 0,time = 0,time2 = 0; int flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0; for(int i = 1; i <= n; i++ ) { cin>>num; switch(num%5) { case 0:if(num % 2 == 0){a1 += num;flag1 = 1;}break; case 1:time2++;if(time2 %
2 != 0)a2 += num;else a2 -= num;flag2 = 1;break; case 2:a3++;flag3 = 1;break; case 3:sum += num;time++;flag4 = 1;break; case 4:if(num > a5)a5 = num;flag5 = 1;break; } } a4 = sum *1.0/time; if(flag1 == 0) printf("N "); else printf("%d ",a1); if(flag2 == 0) printf("N "); else printf("%d ",a2); if(flag3 == 0) printf("N "); else printf("%d ",a3); if(flag4 == 0) printf("N "); else printf("%.1f ",a4); if(flag5 == 0) printf("N"); else printf("%d",a5); //printf("%d %d %d %.1f %d",a1,a2,a3,a4,a5); system("pause"); return 0; }