害死人不償命的(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官網中送出
送出效果
思路
讀入題目給出的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官網中送出
送出結果
思路
找操作需①令數組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。