1. 程式人生 > >PAT乙級練習(三)

PAT乙級練習(三)

1011 A+B 和 C(15 分)

給定區間 [−2​31​​,2​31​​] 內的 3 個整數 A、B 和 C,請判斷 A+B 是否大於 C。

輸入格式:

輸入第 1 行給出正整數 T (≤10),是測試用例的個數。隨後給出 T 組測試用例,每組佔一行,順序給出 A、B 和 C。整數間以空格分隔。

輸出格式:

對每組測試用例,在一行中輸出 Case #X: true 如果 A+B>C,否則輸出 Case #X: false,其中 X 是測試用例的編號(從 1 開始)。

輸入樣例:

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

輸出樣例:

Case #1: false
Case #2: true
Case #3: true
Case #4: false

 部分正確

#include<iostream>
#include<cstdio>
using namespace std;
int main() {
	int cnt = 0,a,b,c;
	cin >> cnt;
	int i = 1;
	for (; i <= cnt; i++) {
		cin >> a >> b >> c;
		if (a + b > c) {
			printf("Case #%d: true\n", i);
		}
		else printf("Case #%d: false\n", i);
	}
	return 0;
}

1012 數字分類(20 分)

給定一系列正整數,請按要求對數字進行分類,並輸出以下 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​​ 並在一行中順序輸出。數字間以空格分隔,但行末不得有多餘空格。

若其中某一類數字不存在,則在相應位置輸出 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<iostream>
#include<cstdio>
using namespace std;

int main() {
	int count = 0, cnt = 0, t, flag = 1,sum=0;
	int arr[1001] ;
	float a[5] = { 0,0,0,0,0 };
	cin >> t;
	for (int i = 0; i < t; i++) {
		cin >> arr[i];
		if (arr[i] % 5 == 0 && arr[i] % 2 == 0) {
			a[0] += arr[i];
		}
		if (arr[i]%5==1) {
			a[1] += arr[i] * flag;
			flag = flag * (-1);
		}
		if (arr[i] % 5 == 2) {
			a[2]++;
		}
		if (arr[i] % 5 == 3) {
			sum += arr[i];
			count++;
		}
		if (arr[i] % 5 == 4) {
			if (arr[i] > a[4]) {
				a[4] = arr[i];
			}
		}
	}
	
	a[3] = (float)sum / count;
	if (a[0] == 0)
		printf("N ");
	else
		printf("%d ", a[0]);
	if (a[1] == 0)
		printf("N ");
	else
		printf("%d ", a[1]);
	if (a[2] == 0)
		printf("N ");
	else
		printf("%d ", a[2]);
	if (a[3] == 0)
		printf("N ");
	else
		printf("%.1lf ", a[3]);
	if (a[4] == 0)
		printf("N");
	else
		printf("%d",a[4]);
	return 0;
}

float強制轉換為int,變數為0,修改好後,仍然有部分答案錯誤,待改

1013 數素數(20 分)

令 P​i​​ 表示第 i 個素數。現任給兩個正整數 M≤N≤10​4​​,請輸出 P​M​​ 到 P​N​​ 的所有素數。

輸入格式:

輸入在一行中給出 M 和 N,其間以空格分隔。

輸出格式:

輸出從 P​M​​ 到 P​N​​ 的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。

輸入樣例:

5 27

輸出樣例:

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
bool pads(int x) {
	int k = 1;
	for (int i = 2; i <= sqrt(x); i++) {
		if (x%i == 0) return false;
	}
	return true;
	
}
int main() {
	int m, n,i=2;
	cin >> m >> n;
	int cnt = 0;
	while (cnt <= n) {
		if (pads(i)) {
			cnt++;
			if (cnt >= m && cnt <= n) {
				
				if ((cnt - m + 1) % 10 != 1) 
					cout << " ";
				cout << i;
				if ((cnt - m + 1) % 10 == 0)
					cout << "\n";	
			}
		}
		i++;
	}
	return 0;
}