L1-056 猜數字


L1-056 猜數字 (20 分)

一群人坐在一起,每人猜一個 100 以內的數,誰的數字最接近大家平均數的一半就贏。本題就要求你找出其中的贏家。

輸入格式:

輸入在第一行給出一個正整數N(104​​)。隨后 N 行,每行給出一個玩家的名字(由不超過8個英文字母組成的字符串)和其猜的正整數(≤ 100)。

輸出格式:

在一行中順序輸出:大家平均數的一半(只輸出整數部分)、贏家的名字,其間以空格分隔。題目保證贏家是唯一的。

輸入樣例:

7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62

輸出樣例:

22 Amy
#include<iostream>
#include<string>
#include<math.h>

using namespace std;

struct People {
    string name;
    int number;
};
int main() {
    People people[10000];
    int n, target, tp = 0, sum = 0, min = 100000;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> people[i].name >> people[i].number;
        sum += people[i].number;
    }
    target = (sum / n) / 2;

    for (int i = 0; i < n; i++) {
        int d = abs(people[i].number - target);
        if (min > d) {
            min = d;
            tp = i;
        }
    }

    cout << target << " " << people[tp].name;

    return 0;
}

初次提交的時候,因為min的值為0,導致程序沒有辦法更新min的值。在最后一個訪問點出現段錯誤,所謂的段錯誤就是內存訪問越界,經過檢查,發現自己最開始的people數組定義為1000,小於題目所要求的。


免責聲明!

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



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