天天看點

PAT刷題筆記——3n+1猜想,挖掘機技術哪家強與查找x害死人不償命的(3n+1) 猜想題目描述挖掘機技術哪家強找x題目描述

害死人不償命的(3n+1) 猜想題目描述

卡拉茲(Callatz)猜想:

對任何個自然數n,如果它是偶數,那麼把它砍掉一半: 如果它是奇數,那麼把(3n+1)砍掉一半。這樣一直反複砍下去, 最後一定在某步得到n=1。卡拉茲在1950年的世界數學家大會上公布了這個猜想,傳說當時耶魯大學師生齊動員,拼命想證明這個貌似很荒唐…

此處并非要證明卡拉茲猜想,而是對給定的任一不超過1000的正整數n,簡單地數下,需要多少步才能得到n=1?

輸入格式

每個測試輸入包含1個測試用例,即給出自然數n的值。

輸出格式

輸出從n計算到1需要的步數。

輸入樣例3

輸出樣例5

C++代碼實作

#include<string.h>
#include<Windows.h>
#include<cstdio>
using namespace std;
int main() {
	int n, step = 0;
	scanf_s("%d", &n);
	while (n != 1) {
		if (n % 2 == 0) n = n / 2;
		else n = (3 * n + 1) / 2;
		step++;
	}
	printf("%d\n", step);
	system("pause");
	return 0;
}
           

在PAT官網中送出

PAT刷題筆記——3n+1猜想,挖掘機技術哪家強與查找x害死人不償命的(3n+1) 猜想題目描述挖掘機技術哪家強找x題目描述

送出效果

PAT刷題筆記——3n+1猜想,挖掘機技術哪家強與查找x害死人不償命的(3n+1) 猜想題目描述挖掘機技術哪家強找x題目描述

思路

讀入題目給出的n,之後用while循環語句反複判斷n是否為1:①如果n為1,則退出循環。

②如果n不為1,則判斷n是否為偶數,如果是偶數,則令n除以2:否則令n為(3 *n+ 1)/2。之後令計數器step加1。

這樣當退出循環時,step 的值就是需要的答案。

挖掘機技術哪家強

題目描述

為了用事實說明挖掘機技術到底哪家強,PAT 組織了-場挖掘機技能大賽。請根據比結果統計出技術最強的那個學校。輸入格式

在第1行給出不超過10的正整數N,即參賽人數。随後N行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編号(從1開始連續編号)及其比賽成績(百分制),中間以空格分隔。輸出格式

在一行中給出 總得分最高的學校的編号及其總分,中間以空格分隔。題目保證答案唯一,沒有并列。輸入樣例

6

3 65

2 80

1 100

2 70

3 40

3 0

輸出樣例2 150

C++代碼實作:

#include<cstdio>
#include<string.h>
using namespace std;
#include<Windows.h>
const int maxn = 100010;
int school[maxn] = { 0 };
int main() {
	int n, schID, score;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf_s("%d%d", &schID, &score);
		school[schID] += score;
	}
	int k = 1, MAX = -1;
	for (int i = 1; i <= n; i++) {
		if (school[i] > MAX) {
			MAX = school[i];
			k = i;
		}
	}
	printf("%d%d\n", k, MAX);
	system("pause");
	return 0;
}
           

在PAT官網中送出

PAT刷題筆記——3n+1猜想,挖掘機技術哪家強與查找x害死人不償命的(3n+1) 猜想題目描述挖掘機技術哪家強找x題目描述

送出結果

PAT刷題筆記——3n+1猜想,挖掘機技術哪家強與查找x害死人不償命的(3n+1) 猜想題目描述挖掘機技術哪家強找x題目描述

思路

找操作需①令數組school[maxn]記錄每個學校的總分,初值為0。 對每一個讀入的學校schID如果需其對應的分數score,令scol[schID] + score.

②令變量k記錄最高總分的學校編号,變量MAX記錄最高總分,初值為-1.由于生看 一道例題。是連續編号的,是以枚舉編号I~N,不斷更新k和MAX即可。

找x題目描述

輸入一個數n (1≤n≤200),然後輸入n個數值各不相同的數,再輸入-個值x,輸出這個值在這個數組中的下标(從0開始,若不在數組中則輸出-1)。輸入格式

測試資料有多組,輸入n (1≤n≤200),接着輸入n個數,然後輸入x。輸出格式

對于每組輸入,請輸出結果。樣例

輸入4

1234

3

樣例輸出

2

C++代碼實作

#include<cstdio>
#include<string.h>
using namespace std;
#include<Windows.h>
const int maxn = 210;
int a[maxn];
int main() {
	int n, x;
	while (scanf_s("%d", &n) != EOF) {
		for (int i = 0; i < n; i++) {
			scanf_s("%d", &a[i]);
		}
		scanf_s("%d", &x);
		int k;
		for (k = 0; k < n; k++) {
			if (a[k] == x) {
				printf("%d\n", k);
				break;
			}
		}
		if (k == n) {
			printf("-1\n");
		}
	}
	system("pause");
	return 0;
}
           

思路

題目給定了n個互不相同的數,然後需要從中尋找值為x的數的下标。是以可以設定個數組a,用來存放這n個數。然後周遊數組a,尋找某個下标k,使得a[k]=x成立。如是找到,則輸出k,并退出查詢;如果當k周遊完之後還沒有找到x,那麼輸出-1。

繼續閱讀