L1-056 猜数字 (20分)

两盒软妹~` 提交于 2019-12-12 00:39:57

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

输入格式:

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

输出格式:

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

输入样例:

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

输出样例:

22 Amy
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct name{
	char str[9];
	int n;
}a[10001];
int main(){
	int n,i,k;
	cin>>n;
	for(i=0;i<n;i++)
		scanf("%s%d",a[i].str,&a[i].n);
	int sum=0;
	for(i=0;i<n;i++)
		sum+=a[i].n;
	sum=sum/(2*n);
	cout<<sum<<" ";
	int b[10001];
	for(i=0;i<n;i++)
		b[i]=abs(a[i].n-sum);
	int min=b[0];
	for(i=1;i<n;i++)
		if(b[i]<min)
			min=b[i];
	for(i=0;i<n;i++)
		if(b[i]==min){
			k=i;
			break;
		}
	cout<<a[k].str<<endl;
	//最小b[i]对应的a[i].str
	//sort(b,b+n);
	//排序思路不好
	//cout<<b[0]<<endl;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!