[NOIP2008 提高組] 笨小猴(洛谷題號P1125)

Tomorrowland_D發表於2024-07-23

[NOIP2008 提高組] 笨小猴

題目描述

笨小猴的詞彙量很小,所以每次做英語選擇題的時候都很頭疼。但是他找到了一種方法,經試驗證明,用這種方法去選擇選項的時候選對的機率非常大!

這種方法的具體描述如下:假設maxn是單詞中出現次數最多的字母的出現次數,minn是單詞中出現次數最少的字母的出現次數,如果maxn-minn是一個質數,那麼笨小猴就認為這是個 Lucky Word,這樣的單詞很可能就是正確的答案。

輸入格式

一個單詞,其中只可能出現小寫字母,並且長度小於100。

輸出格式

共兩行,第一行是一個字串,假設輸入的的單詞是 Lucky Word,那麼輸出 Lucky Word,否則輸出 No Answer

第二行是一個整數,如果輸入單詞是 Lucky Word,輸出maxn-minn的值,否則輸出 0。

樣例 #1

樣例輸入 #1

error

樣例輸出 #1

Lucky Word
2

樣例 #2

樣例輸入 #2

olympic

樣例輸出 #2

No Answer
0

提示

【輸入輸出樣例 1 解釋】

單詞 error 中出現最多的字母 r 出現了 3 次,出現次數最少的字母出現了 1 次,3-1=2,2是質數。

【輸入輸出樣例 2 解釋】

單詞 olympic 中出現最多的字母 出現了 1 次,出現次數最少的字母出現了 1 次,1-1=0,0 不是質數。

(本處原題面錯誤已經修正)

noip2008 提高第一題

一道有關於字串的題目--

這道題我們大致可以分為以下幾個步驟:
1.輸入一個字串,並遍歷這個字串,設立Numbers陣列(我們暫且可以將Numbes陣列初始化為0),儲存這個字串中出現字元的個數.

2.遍歷這個陣列,並找出這個陣列中最小的,並且字串中出現過的字元的次數的最小值minn和最大值maxn(最小值的判斷有一個坑——那就是我們不能僅僅找出陣列中的最小值,同時這個最小值必須得>0,
表示這個字元在輸入的字串中出現過)

3.定義一個函式,判斷一個整數是否是質數

4.找出最小值和最大值以後,定義diff變數=maxn-minn,判斷這個數是否是質數,如果不是質數,第一行輸出"No Answer",第二行輸出0即可。
如果這個數是質數,則第一行輸出"Lucky Word",第二行輸出diff這個變數的值就可以了。

具體可以編譯執行的程式碼如下:

#include <iostream>
#include <cmath>
using namespace std;
// 判斷一個數是否是質數
bool isPrime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return false;
        }
    }

    return true;
}
int main() {
    //輸入字串
    string s;
    cin >> s;
    //利用Numbers陣列,來判斷這個字串中出現的字母的次數
    int Numbers[26] = { 0 };
    for (int i = 0; i < s.size(); i++) {
        int n = (s[i] - 'a');
        Numbers[n]++;
    }

    int maxn = 0, minn = 110;
    for (int i = 0; i < 26; i++) {
        if (Numbers[i] > maxn) maxn = Numbers[i];
        //在這裡一定要注意,不能直接比對Numbers陣列中最小的那位,而是Numbers陣列中最小的那位,並且它的值不能等於0(即這個字母至少在字串中出現過一次)
        if (Numbers[i] > 0 && Numbers[i] < minn) minn = Numbers[i];
    }

    int diff = maxn - minn;
    if (isPrime(diff)) {
        cout << "Lucky Word" << endl;
        cout << diff;
    }
    else {
        cout << "No Answer" << endl;
        cout << 0;
    }
    return 0;
}


這道題我想告訴大家的是,並不是在遍歷陣列找最小值的時候,一定只有最小值這個邏輯條件。
比如這道題,不僅要找最小值,並且這個最小值還不能是0,一定要清楚的判斷我們的需求,然後根據這個需求來書寫判斷邏輯

相關文章