1. 程式人生 > 其它 >數字分類 (20 分)

數字分類 (20 分)

技術標籤:PTA

一、題目簡介

描述
輸入格式:
每個輸入包含 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

二 、思路與程式碼

**思路:**因為我們需要記錄出現數字次數以及每個分類的最終結果,所以我們直接使用一個二維陣列來儲存最終結果,一個記錄結果一個記錄個數。我們對每一個數字進行分類,再分別對應不同的操作,並把相應的計數加一。
情況一,將偶數相加求和。
情況二,設定一個標誌位,每次將這個標誌位取負並乘以運算元再相加。
情況三,將陣列記錄的數字加一。
情況四,直接求和,最終輸出的時候除以個數就行(不可以四捨五入)
情況五,每次遇到更大的數字就更新為更大的數字。

程式碼:

#include <stdio.h>

int flag = 1;
int getRes(int A[][2],int
n); void printRes(int A[][2]); int main(){ int A[5][2] = {0}; A[4][0] = 0xffffffff; int n, temp; scanf("%d", &n); while(n--){ scanf("%d", &temp); getRes(A, temp); } printRes(A); return 0; } // 列印資訊 void printRes(int A[][2]){ for
(int i = 0; i < 5; i++){ if (i > 0){ printf(" "); } // 判斷是否有此類的個數 if(A[i][1] == 0){ printf("N"); }else{ if(i != 3){ printf("%d", A[i][0]); }else{ // 對於第四類需要特殊對待 printf("%0.1f", A[3][0]*1.0/A[3][1]); } } } } // 五類操作 int getRes(int A[][2],int n){ switch(n % 5){ case 0: if(n % 2 == 0){ A[0][0] += n; A[0][1]++; } break; case 1: A[1][0] += (flag * n); // 每次相乘取負,保證題目要求 A[1][1]++; flag = -flag; break; case 2: A[2][0]++; A[2][1]++; break; case 3: A[3][0] += n; A[3][1]++; break; case 4: if(n > A[4][0]){ // 記錄最大值 A[4][0] = n; A[4][1]++; } break; } }