#include <iostream>usingnamespacestd;
int main() {
int n;
cin >> n;
int count = 0;
while (n != 1) {
if (n % 2 != 0) {
n = 3 * n + 1;
}
n = n / 2;
count++;
}
cout << count;
return0;
}
1002. 寫出這個數 (20)-PAT乙級真題
讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。
輸入格式:每個測試輸入包含1個測試用例,即給出自然數n的值。這裏保證n小於10100。
輸出格式:
在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後一個拼音 數字後沒有空格。
輸入樣例:
1234567890987654321123456789
輸出樣例:
yi san wu
#include <iostream>usingnamespacestd;
int main() {
string s;
cin >> s;
unsignedlong len;
len = s.length();
int *a;
a = newint[len];
int sum = 0;
string str[10] = {
"ling",
"yi",
"er",
"san",
"si",
"wu",
"liu",
"qi",
"ba",
"jiu"
};
for (int i = 0; i < len; ++i) {
a[i] = s[i] - '0';
sum = sum + a[i];
}
int *b;
b = newint[len];
int j = 0;
if (sum == 0) {
cout << "ling";
} else {
while (sum != 0) {
b[j++] = sum % 10;
sum = sum / 10;
}
}
for (int k = j - 1; k >= 1; k--) {
cout << str[b[k]] << " ";
}
cout << str[b[0]];
delete[] a;
delete[] b;
return0;
}
1003. 我要通過!(20)-PAT乙級真題
“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。
得到“答案正確”的條件是:
1. 字符串中必須僅有P, A, T這三種字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以獲得“答案正確”,其中 x 或者是空字符串,或者是僅由字母 A 組成的字符串;
3. 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a, b, c 均或者是空字符串,或者是僅由字母 A 組成的字符串。
現在就請你爲PAT寫一個自動裁判程序,判定哪些字符串是可以獲得“答案正確”的。
輸入格式:
每個測試輸入包含1個測試用例。第1行給出一個自然數n (<10),是需要檢測的字符串個數。接下來每個字符串佔一行,字符串長度不超過100,且不包含空格。
輸出格式:
每個字符串的檢測結果佔一行,如果該字符串可以獲得“答案正確”,則輸出YES,否則輸出NO。
輸入樣例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
輸出樣例:
YES
YES
YES
YES
NO
NO
NO
NO
#include <iostream>usingnamespacestd;
bool judge(string str) {
unsignedlong len;
len = str.length();
if (len <= 2)
returnfalse;
bool book[3] = {false};
for (int i = 0; i < len; i++) {
if(str[i] == 'P')
book[0] = true;
elseif(str[i] == 'A')
book[1] = true;
elseif(str[i] == 'T')
book[2] = true;
elsereturnfalse;
if (str[i] == 'P') {
for (int j = 0; j < i; j++) {
if (str[j] != 'A')
returnfalse;
}
if (str [i+1] != 'A')
returnfalse;
for (int k = i + 2; k < len; k++) {
if (str[k] != 'A') {
if (str[k] != 'T') {
returnfalse;
}
if ((len - 1 - k) != ((k - 1 - i) * i))
returnfalse;
for (int m = k + 1; m < len; m++) {
if (str[m] != 'A')
returnfalse;
}
}
}
}
}
return !(!book[0] || !book[1] || !book[2]);
}
int main() {
int n;
cin >> n;
string s;
for(int i = 0; i < n; i++) {
cin >> s;
if(judge(s))
cout << "YES" << endl;
elsecout << "NO" << endl;
}
return0;
}
1004. 成績排名 (20)-PAT乙級真題
讀入n名學生的姓名、學號、成績,分別輸出成績最高和成績最低學生的姓名和學號。
輸入格式:每個測試輸入包含1個測試用例,格式爲
第1行:正整數n
第2行:第1個學生的姓名 學號 成績
第3行:第2個學生的姓名 學號 成績
… … …
第n+1行:第n個學生的姓名 學號 成績
其中姓名和學號均爲不超過10個字符的字符串,成績爲0到100之間的一個整數,這裏保證在一組測試用例中沒有兩個學生的成績是相同的。
輸出格式:對每個測試用例輸出2行,第1行是成績最高學生的姓名和學號,第2行是成績最低學生的姓名和學號,字符串間有1空格。
輸入樣例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
輸出樣例:
Mike CS991301
Joe Math990112
#include <iostream>usingnamespacestd;
int main() {
int n;
cin >> n;
int max = -1, min = 101, score;
string maxName, minName, maxNum, minNum, name, num;
for (int i = 0; i < n; ++i) {
cin >> name;
cin >> num;
cin >> score;
if (max < score) {
max = score;
maxName = name;
maxNum = num;
}
if (min > score) {
min = score;
minName = name;
minNum = num;
}
}
cout << maxName << " " << maxNum << endl << minName << " " << minNum;
return0;
}
#include <iostream>#include <algorithm>usingnamespacestd;
int cmp(int a, int b) {
return a > b;
}
int main() {
int n;
cin >> n;
int *a = newint[n];
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
int t;
sort(a, a + n, cmp);
for (int i = 0; i < n; ++i) {
t = a[i];
while (t != 1 && t != 999) {
if (t % 2 == 0) {
t = t / 2;
} else {
t = (t * 3 + 1) / 2;
}
for (int j = 0; j < n; ++j) {
if (t == a[j] && j != i)
a[j] = 999;
}
}
}
sort(a, a + n, cmp);
int temp = 0;
for (int k = n - 1; k >= 0; --k) {
if (a[k] != 999)
temp = k;
}
for (int l = temp; l < n - 1; ++l) {
cout << a[l] << " ";
}
cout << a[n - 1];
delete[] a;
return0;
}