PAT (Basic Level) Practice (中文) 1012 數字分類 (20 分) (C++)

1012 數字分類 (20 分)

給定一系列正整數,請按要求對數字進行分類,並輸出以下 5 個數字:

A1 = 能被 5 整除的數字中所有偶數的和;
A​2 = 將被 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

#include <cstdio>
#include <cstring>

int main()
{
	int A1 = 0, A2 = 0, A3 = 0, A5 = 0;//全部初始化爲0,有些可以直接當作標誌變量判斷是否存在該類數字
	double A4_sum = 0, A4_cnt = 0;//浮點數
	int flag = 1;//1or2正 0負;同時充當是否存在A2類數字的標誌變量
	int N = 0;
	scanf("%d", &N);
	for(int i=0; i<N; i++)//輸入一個數字根據題意判斷屬於哪一類,並進行處理
	{
		int x = 0;
		scanf("%d", &x);
		if (x % 10 == 0) A1 += x;
		else if (x % 5 == 1)
			if (flag)
				A2 += x, flag = 0;
			else
				A2 -= x, flag = 2;
		else if (x % 5 == 2) A3++;
		else if (x % 5 == 3) { A4_sum += x; A4_cnt++; }
		else if (x % 5 == 4) A5 = x > A5 ? x : A5;
	}
	if (A1) printf("%d", A1); else printf("N");//由於x爲正整數,若存在該類A1必非零
	if (flag!=1) printf(" %d", A2); else printf(" N");//flag的妙用
	if (A3) printf(" %d", A3); else printf(" N");//下面三個很好理解吧
	if (A4_cnt) printf(" %.1lf", (A4_sum/A4_cnt) ); else printf(" N");
	if (A5) printf(" %d", A5); else printf(" N");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章