每日一练2023.12.11—— 猜数字【PTA】

题目链接:L1-056 猜数字 

题目要求:

一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。

输入格式:

输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。

输出格式:

在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。

输入样例:

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

输出样例:

22 Amy

思路:

1.按题目要求先定义一个数组s进行存放字符串,也就是名字,一个数组x用来存放报的数

2.循环遍历将报的数累加到sum里面,求其平均数存放在t里

3.再次循环遍历将每个数与平均数的一半的差值求出来,并且找到最小差值的那个数

4.再次循环遍历找到最小差值的下标,最后将平均值的一半和最小差值的名字打印出来

代码:

#include <bits/stdc++.h>

using namespace std;

#define N 10000
int main()
{
    int n;
    cin >> n;
    string s[N];
    int x[N];
    int sum = 0;
    for(int i = 0; i < n; i ++)
    {
        cin >> s[i] >> x[i];
        sum += x[i];
        
    }
    int t = sum / n / 2;
    int z;
    int m = N;
    for(int i = 0; i < n; i ++)
    {
        if(x[i] - t > 0)
            z = x[i] - t;
        else
            z = t - x[i];
        m = min(z, m);
    }
    int idx;
    for(int i = 0; i < n; i ++)
    {
        if(x[i] - t == m || t - x[i] == m)
            idx = i;
    }
    cout << t << " " << s[idx] << endl;
    return 0;
}

测试结果:

猜你喜欢

转载自blog.csdn.net/m0_63168877/article/details/134908949