PAT 乙級 1012 (方法 + 程式碼)
阿新 • • 發佈:2018-12-15
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
解題思路:
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;
}