PTA L1-056 猜数字c++ (20分)

L1-056 猜数字 (20分)

输入格式:


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

输出格式:


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

输入样例:

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

输出样例:

22 Amy
                                                           作者: 陈越
                                                           单位: 浙江大学
                                                           时间限制: 400 ms
                                                           内存限制: 64 MB
                                                           代码长度限制: 16 KB

题目分析:

要求找出猜到最接近平均数一半的朋友,输出平均数的一半 然后输出这个朋友的名字。
简单的模拟题,可以把每人的名字、猜的数字和与平均数的一半的差值用结构体表示出来。
再根据这个差值将结构体从小到大排序,此时排在第一位的朋友就是最接近正确答案的朋友啦。

代码如下:

#include 
#include 
#include    //用到abs()求绝对值函数
using namespace std;

struct people
{
    string name;  //朋友的名字
    int num;   //猜的数
    int s;  //和目标值的差
}peo[10010];

bool rule(people a,people b)    //自定义排序规则
{
    return a.s< b.s;
}
int main()
{
    int n,sum=0;   //sum计算所有朋友猜的数的和 (sum/n)/2就是平均数的一半
    cin >> n;  
    for(int i=0;i<n;i++)    //依次输入n个朋友名字 所猜的数,sum累加
    {
        cin >> peo[i].name >> peo[i].num;
        sum+=peo[i].num;
    }
    for(int i=0;i<n;i++)  //为差值赋值
    {
        peo[i].s=abs(peo[i].num-(sum/n)/2);
    }
    sort(peo,peo+n,rule);    //排序
    cout << (sum/n)/2 << " "<<peo[0].name;
    return 0;
}

加油!

你可能感兴趣的:(PTA L1-056 猜数字c++ (20分))