实况球员综合能力大比拼
Time Limit: 1000ms Memory limit: 65535K 有疑问?点这里^_^
题目描述
大家都应该听说过实况足球吧,如果这个没听说过的话,大家应该听说过中国足球吧,无人不知无人不晓的神一样的队伍。
其实我们今天要讨论的话题主要是实况足球这个游戏,模拟的是整个足球界的所有球队,当然对于开发者能够把中国足球加进去表示非常感激。
每支球队都有若干名球员,每个球员又有若干种能力,当然不同的球员的能力是不同的。我们关注的是球员的几项能力:速度,力量,技巧,视野,进攻,防守,团队配合能力。每种能力都有一个比重系数,当然对于不同的球队,各项能力所占的比重系数可能是不一样的,今天我们希望对那些著名球员们按综合能力进行一下排名,如果出现综合能力值相同的球员按照七项能力从前到后高的优先,如果仍旧有相同的则按名字的字典序从小到大排序。综合能力的计算方法是把各个能力按比重系数加权求和,所得结果即为该球员的综合能力值。
输入
多组输入,相邻两组数据用空行隔开。每组输入的第一行为该球队球员各项能力所占的比重系数
,7
个整数(
[1,10]
),分别对应题目描述中的
7
项能力,用空格隔开。第二行是一个正整数
N
(
0 < N < 50
),代表该球队要参与排名的球员总数,接下来
N
行,每行的有一个球员的名字,名字中间可能有空格,长度不超过
20
。再接下来
N
行,每行有一个跟上面
N
行中每行相对应的那名球员的各项能力的数据,每行
7
个用空格隔开的非负整数(
[0,10]
)。输入处理到文件结束为止。
输出
每组数据对应一组输出,每组数据中按照输入顺序给出每个球员的综合能力和他在该组中的综合排名(从
1
开始),两者用空格隔开,每个球员的输出一行。每组数据最后输出一个空行。
示例输入
10 8 8 10 5 5 1013梅西佩德罗比利亚哈维伊涅斯塔蒂亚戈马斯切拉诺阿尔维斯阿比达尔皮克普约尔阿德里亚诺巴尔德斯10 9 10 9 10 8 108 8 8 8 8 7 98 9 8 7 7 6 78 8 9 10 9 8 108 8 9 9 10 8 108 8 8 7 7 7 77 7 8 8 6 7 88 9 8 8 7 8 86 7 8 8 8 8 87 8 9 8 8 10 88 7 6 8 7 10 86 7 8 8 7 8 77 10 8 8 8 9 89 10 9 8 6 5 85C.罗纳尔多本泽马迪马利亚厄齐尔阿隆索9 10 10 8 10 8 89 9 9 8 9 8 89 8 9 9 9 8 99 8 9 9 8 8 88 9 8 10 9 8 8
示例输出
532 1453 6421 9501 2496 3418 11415 12451 7420 10456 5429 8405 13459 4499 1474 3480 2466 5472 4
提示
来源
tongjiantao
示例程序
题目很长,但是看起来很不错的样子,结构体运用,不好理解题目的意思。
代码如下:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct
{
int a[7],zong, m;
char ming[20];
} pl[51], t;
int main()
{
int b[7], n, i, j, k, x;
while(scanf("%d",&b[0])!=EOF)
{
for(i = 1; i < 7; i++)
{
scanf("%d",&b[i]);
}
scanf("%d ",&n);
for(i = 0; i < n; i++)
gets(pl[i].ming);
for(i = 0; i < n; i++)
{
pl[i].zong=0;
for(j = 0; j < 7; j++)
{
scanf("%d",&pl[i].a[j]);
pl[i].zong+=b[j]*pl[i].a[j];
}
}
for(i = 0; i < n; i++)
{
pl[i].m = 1;
for(j = 0; j < n; j++)
{
x = 0;
if(pl[i].zong<pl[j].zong) {pl[i].m++;x=1;}
else if(pl[i].zong==pl[j].zong)
{
for(k = 0; k < 7; k++)
{
if(pl[i].a[k]<pl[j].a[k])
{
pl[i].m++;
x=1;
break;
}
else if(pl[i].a[k]>pl[j].a[k])
{
x=1;
break;
}
}
}
else
x=1;
if(x==0&&strcmp(pl[i].ming,pl[j].ming)>0)
{
pl[i].m++;
}
}
}
for(i = 0; i < n; i++)
{
printf("%d %d\n",pl[i].zong,pl[i].m);
}
printf("\n");
}
return 0;
}