一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:
输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:
在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例:
7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62
输出样例:
22 Amy
C语言:
设置结构存储每条人名及猜测的数字
将所有人猜测的数字累加求和进一步求解平均数的一半
设置for循环并利用abs()函数求其绝对值,将每个人猜测的数值与平均值的一半进行比较,记录差值最小的数值并记录其对应的元素下标
最终进行输出
#include <stdio.h>
#include <string.h>
#include <math.h>
struct people//设置结构存储人名及对应的数字
{
char name[10];
int number;
}person[10001];
int main()
{
int n,i,sum=0,ave,mid=10000,per,order;
scanf("%d",&n);//读入行数n
for(i=0;i<n;i++)
{//循环读入每条人名及其数字并存储到结构person[10001]中,并用sum累计给出的数字和
scanf("%s %d",&person[i].name,&person[i].number);
sum=sum+person[i].number;
}
ave=sum/n/2;//求平均值的一半
for(i=0;i<n;i++)
{//设置循环,对每个人给出的数字和所求得的平均值的一半进行比对,找出差值最小的即最接近的
if(abs(person[i].number-ave)<=mid)
{
mid=abs(person[i].number-ave);
per=i;//记录最小差值的元素下标
}
}
order=per;
printf("%d %s\n",ave,person[order].name);//将求得的平均值的一般与差值最小的人名进行输出
}