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,小於題目所要求的。