ZeroJudge A286: 難道這就是命中注定

你們可能不明白,追求者太多其實也是很困擾的一件事,

尤其是在不知道該選誰比較好的時候。

這時候不妨參考一下所謂命中注定的緣份指數,

傳說每個人出生時都會帶著特別的命格,可以用”特別數”來簡單分類,

而特別數越相近即是跟自己越合得來的人。

把出生的年月日的每個數字相加,直到最後變成個位數,即得到自己的特別數

比如說,1990年9月28日出生,特別數就是2

1 + 9 + 9 + 0 + 9 + 2 + 8 = 38

3 + 8 = 11

1 + 1 = 2

給你某個正妹和她的追求者們的生日,請你算算誰會是得到正妹青睞的幸運兒。 

範例測資

範例輸入範例輸出
EOF 輸入,第一行有三個整數,代表正妹的出生年、月、日 (保證她還活在世上)
接著有一個整數 N (1 <= N <= 100),代表正妹有幾個追求者
接著有 N 行,每一行有三個整數,分別代表每一個追求者的出生年、月、日
輸出一個整數K
代表第K個追求者的特別數和正妹的最相近
若最相近的不只一個,輸出順序較前面的那一個,先到先贏
1990 9 28
1
1992 4 1

1991 10 15
2
1992 4 1
1992 3 2
1
1

解題思路

使用字串來收出生的年、月、日。判斷相差值的時候可以使用小於這樣子就不會有相同相差值需要進行判斷的情況。

範例程式碼-ZeroJudge A286: 難道這就是命中注定

#include <iostream>
using namespace std;

int calc (string a, string b, string c)
{
    string arr[3] = {a, b, c};
    int ans = 0;
    for (int i = 0; i<3; i++)
    {
        for (int j = 0; j<arr[i].length(); j++)
        {
            ans += int(arr[i][j] - '0');
        }
    }
    while (ans >= 10)
    {
        string str = to_string(ans);
        ans = 0;
        for (int i = 0; i<str.length(); i++)
        {
            ans += int(str[i] - '0');
        }
    }
    return ans;
}

int main() {
    cin.sync_with_stdio(0);
    cin.tie(0);
    cout.sync_with_stdio(0);
    cout.tie(0);
    string a, b, c;
    while (cin >> a >> b >> c)
    {
        int special = calc(a, b, c), N, difference = 999999, ans;
        cin >> N;
        for (int i = 1; i<=N; i++)
        {
            cin >> a >> b >> c;
            int count = calc(a, b, c), variance = abs(count - special);
            if (variance < difference)
            {
                difference = variance;
                ans = i;
            }
        }
        cout << ans << "\n";
    }
}

//ZeroJudge A286
//Dr. SeanXD

發佈留言