PAT基礎級-鑽石段位樣卷1


7-1 是不是太胖了 (5分)
 

據說一個人的標准體重應該是其身高(單位:厘米)減去100、再乘以0.9所得到的公斤數。已知市斤的數值是公斤數值的兩倍。現給定某人身高,請你計算其標准體重應該是多少?(順便也悄悄給自己算一下吧……)

輸入格式:

輸入第一行給出一個正整數H(100 < H ≤ 300),為某人身高。

輸出格式:

在一行中輸出對應的標准體重,單位為市斤,保留小數點后1位。

輸入樣例:

169
 

輸出樣例:

124.2


#include <iostream>
using namespace std;
int main() {
    double N;
    scanf("%lf", &N);
    printf("%.1f", (N - 100) * 1.8);
    return 0;
}
7-2 裝睡 (10分)
 

你永遠叫不醒一個裝睡的人 —— 但是通過分析一個人的呼吸頻率和脈搏,你可以發現誰在裝睡!醫生告訴我們,正常人睡眠時的呼吸頻率是每分鍾15-20次,脈搏是每分鍾50-70次。下面給定一系列人的呼吸頻率與脈搏,請你找出他們中間有可能在裝睡的人,即至少一項指標不在正常范圍內的人。

輸入格式:

輸入在第一行給出一個正整數N(≤)。隨后N行,每行給出一個人的名字(僅由英文字母組成的、長度不超過3個字符的串)、其呼吸頻率和脈搏(均為不超過100的正整數)。

輸出格式:

按照輸入順序檢查每個人,如果其至少一項指標不在正常范圍內,則輸出其名字,每個名字占一行。

輸入樣例:

4
Amy 15 70
Tom 14 60
Joe 18 50
Zoe 21 71
 

輸出樣例:

Tom
Zoe


#include <iostream>
using namespace std;
int main() {
    int N, hu, mai;
    char name[100];
    scanf("%d", &N);
    while(N--) {
        scanf("%s%d%d", name, &hu, &mai);
        if(hu < 15 || hu > 20 || mai < 50 || mai > 70) 
            printf("%s\n", name);
    }
    return 0;
}
7-3 到底是不是太胖了 (10分)
 

據說一個人的標准體重應該是其身高(單位:厘米)減去100、再乘以0.9所得到的公斤數。真實體重與標准體重誤差在10%以內都是完美身材(即 | 真實體重 − 標准體重 | < 標准體重×)。已知市斤是公斤的兩倍。現給定一群人的身高和實際體重,請你告訴他們是否太胖或太瘦了。

輸入格式:

輸入第一行給出一個正整數N≤ 20)。隨后N行,每行給出兩個整數,分別是一個人的身高H(120 < H < 200;單位:厘米)和真實體重W(50 < W ≤ 300;單位:市斤),其間以空格分隔。

輸出格式:

為每個人輸出一行結論:如果是完美身材,輸出You are wan mei!;如果太胖了,輸出You are tai pang le!;否則輸出You are tai shou le!

輸入樣例:

3
169 136
150 81
178 155
 

輸出樣例:

You are wan mei!
You are tai shou le!
You are tai pang le!

#include <iostream>
#include <cmath>
using namespace std;
int main() {
    int N, height, weight;
    scanf("%d", &N);
    while(N--) {
        scanf("%d%d", &height, &weight);
        double biao = (height - 100.0) * 1.8;
        if(fabs(biao - weight) < (0.1 * biao)) printf("You are wan mei!\n");
        else if(biao < weight) printf("You are tai pang le!\n");
        else printf("You are tai shou le!\n");
    }
    return 0;
}
7-4 到底有多二 (15分)
 

一個整數“犯二的程度”定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍;如果還是個偶數,則再增加1倍。例如數字-13142223336是個11位數,其中有3個2,並且是負數,也是偶數,則它的犯二程度計算為:3,約為81.82%。本題就請你計算一個給定整數到底有多二。

輸入格式:

輸入第一行給出一個不超過50位的整數N

輸出格式:

在一行中輸出N犯二的程度,保留小數點后兩位。

輸入樣例:

-13142223336
 

輸出樣例:

81.82%
 

鳴謝安陽師范學院段曉雲老師和軟件工程五班李富龍同學補充測試數據!

#include <iostream>
using namespace std;
int main() {
    string str;
    cin >> str;
    double fac = 1;
    if(str[0] == '-') {
        fac *= 1.5;
        str.erase(str.begin());
    }
    if((str[str.length() - 1] - '0') % 2 == 0) fac *= 2;
    int cnt = 0;
    for(int i = 0; i < str.length(); i++)
        if(str[i] == '2') cnt++;
    printf("%.2f%%", cnt * 100.0 * fac / str.length());
    return 0;
}
7-5 出生年 (15分)
 

以上是新浪微博中一奇葩貼:“我出生於1988年,直到25歲才遇到4個數字都不相同的年份。”也就是說,直到2013年才達到“4個數字都不相同”的要求。本題請你根據要求,自動填充“我出生於y年,直到x歲才遇到n個數字都不相同的年份”這句話。

輸入格式:

輸入在一行中給出出生年份y和目標年份中不同數字的個數n,其中y在[1, 3000]之間,n可以是2、或3、或4。注意不足4位的年份要在前面補零,例如公元1年被認為是0001年,有2個不同的數字0和1。

輸出格式:

根據輸入,輸出x和能達到要求的年份。數字間以1個空格分隔,行首尾不得有多余空格。年份要按4位輸出。注意:所謂“n個數字都不相同”是指不同的數字正好是n個。如“2013”被視為滿足“4位數字都不同”的條件,但不被視為滿足2位或3位數字不同的條件。

輸入樣例1:

1988 4
 

輸出樣例1:

25 2013
 

輸入樣例2:

1 2 
 

輸出樣例2:

0 0001

#include <iostream>
using namespace std;
int main() {
    int year, diff, cnt = 0;
    cin >> year >> diff;
    while(true) {
        int tmp[10] = {0}, cal = 0;
        tmp[year % 10]++;
        tmp[year / 10 % 10]++;
        tmp[year / 100 % 10]++;
        tmp[year / 1000]++;
        for(int i = 0; i < 10; i++) 
            if(tmp[i]) cal++;
        if(cal == diff) {
            printf("%d %04d", cnt, year);
            break;
        }
        cnt++;
        year++;
    }
    return 0;
}
7-6 C語言競賽 (20分)
 

C 語言競賽是浙江大學計算機學院主持的一個歡樂的競賽。既然競賽主旨是為了好玩,頒獎規則也就制定得很滑稽:

  • 0、冠軍將贏得一份“神秘大獎”(比如很巨大的一本學生研究論文集……)。
  • 1、排名為素數的學生將贏得最好的獎品 —— 小黃人玩偶!
  • 2、其他人將得到巧克力。

給定比賽的最終排名以及一系列參賽者的 ID,你要給出這些參賽者應該獲得的獎品。

輸入格式:

輸入第一行給出一個正整數 N(≤),是參賽者人數。隨后 N 行給出最終排名,每行按排名順序給出一位參賽者的 ID(4 位數字組成)。接下來給出一個正整數 K 以及 K 個需要查詢的 ID。

輸出格式:

對每個要查詢的 ID,在一行中輸出 ID: 獎品,其中獎品或者是 Mystery Award(神秘大獎)、或者是 Minion(小黃人)、或者是 Chocolate(巧克力)。如果所查 ID 根本不在排名里,打印 Are you kidding?(耍我呢?)。如果該 ID 已經查過了(即獎品已經領過了),打印 ID: Checked(不能多吃多占)。

輸入樣例:

6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222
 

輸出樣例:

8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

#include <iostream>
#include <vector>
#include <map>
using namespace std;
bool is_prime(int N) {
    if(N == 2 || N == 3) return true;
    for(int i = 2; i * i <= N; i++)
        if(N % i == 0) return false;
    return true;
}
map<int, int> m;
int main() {
    int N, K, tmp;
    cin >> N;
    vector<int> v(N + 1);
    for(int i = 1; i <= N; i++)
        cin >> v[i];
    cin >> K;
    while(K--) {
        cin >> tmp;
        int i = 1;
        while(i <= N && v[i] != tmp) i++;
        if(i == N + 1) printf("%04d: Are you kidding?\n", tmp);
        else {
            if(m[tmp]) {
                printf("%04d: Checked\n", tmp);
            } else {
                m[tmp] = 1;
                if(i == 1) printf("%04d: Mystery Award\n", tmp);
                else if(is_prime(i)) printf("%04d: Minion\n", tmp);
                else printf("%04d: Chocolate\n", tmp);
            }
        }
    }
    return 0;
}
7-7 查字典 (25分)
 

給定單詞列表,列出常用單詞及該詞在字典中的頁碼。給定任一單詞,請輸出它對應的頁碼。

輸入格式:

輸入的第一行給出列表中單詞的總個數 N( 0 )。下面 N 行,每行列出一個單詞以及對應的頁碼。隨后在一行中給出待查的單詞總數 M( 0 ),下面 M 行,每行列出一個待查的單詞。每個單詞是長度不超過 10 的、由小寫英文字母組成的字符串。

輸出格式:

對每一個待查單詞,輸出它所在的頁碼。每個單詞的輸出占一行。如果該單詞不在列表中,則輸出 Not Found

輸入樣例:

20
principal 904
approve 59
brush 150
chain 189
converge 253
convey 254
explain 398
fall 407
luck 681
rock 998
super 1163
able 3
pity 865
abroad 5
victor 1291
zero 1350
cut 285
door 340
advise 20
fake 407
3
victor
cut
you
 

輸出樣例:

1291
285
Not Found

#include <iostream>
#include <map>
using namespace std;
int main() {
    int N, tmp_i, M;
    cin >> N;
    string tmp;
    map<string, int> m;
    while(N--) {
        cin >> tmp >> tmp_i;
        m[tmp] = tmp_i;
    }
    cin >> M;
    while(M--) {
        cin >> tmp;
        if(m[tmp] != 0) cout << m[tmp] << endl;
        else cout << "Not Found" << endl;
    }
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM