L1-056 猜数字 (20 分)

一群人坐在一起,每人猜一个 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
#include
#include
int main()
{
	char str[10003][9];
	int sum,a[10020],b[10020];
	int t,t1,t2;
	int i,j,n,min,q;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
		{
			if(scanf("%s %d",str[i],&a[i]))
			{
			}
		}
		sum=0;
		for(i=0;i<n;i++)
		{
			sum=sum+a[i];
		}
		sum=sum/n;
		sum=sum/2;
		a[n]=sum;
		for(i=0;i<=n;i++)
		{
			b[i]=a[i];
		}
		for(i=0;i<n;i++)
		{
			min=i;
			for(j=i+1;j<=n;j++)
			{
				if(b[min]>b[j])
				{
					min=j;
				}
			}
			if(min!=i)
			{
				t=b[min];
				b[min]=b[i];
				b[i]=t;
			}
		}
		if(b[n]==sum)
		{
			q=b[n-1];
			for(i=0;i<=n;i++)
			{
				if(a[i]==q)
				{
					break;
				}
			}
			printf("%d %s\n",sum,str[i]);
			continue;
		}
		if(b[0]==sum)
		{
			q=b[1];
			for(i=0;i<=n;i++)
			{
				if(a[i]==q)
				{
					break;
				}
			}
			printf("%d %s\n",sum,str[i]);
			continue;
		}
		for(i=0;i<=n;i++)
		{
			if(b[i]==sum)
			{
				break;
			}
		}
		t1=b[i]-b[i-1];
		t2=b[i+1]-b[i];
		if(t1>t2)
		{
			q=i+1;
		}
		else
		{
			q=i-1;
		}
		for(i=0;i<=n;i++)
		{
			if(a[i]==b[q])
			{
				break;
			}
		}
		printf("%d %s\n",sum,str[i]);
	}
	return 0;
}

你可能感兴趣的:(PTA)