实况球员综合能力大比拼

话说这个题,题目的内容的吸引力明显比题目本身更大啊。。。。。一上来的截图让我热血沸腾啊。。。回到正题。。这个题我没有用排序,而是用的遍历每有一个比该数值大的就+1;最终数字就是排名,然后作为结构体的其中一部分作为标记,便于输出。对了,题目稍长。。。

题目描述

大家都应该听说过实况足球吧,如果这个没听说过的话,大家应该听说过中国足球吧,无人不知无人不晓的神一样的队伍。

    其实我们今天要讨论的话题主要是实况足球这个游戏,模拟的是整个足球界的所有球队,当然对于开发者能够把中国足球加进去表示非常感激。

每支球队都有若干名球员,每个球员又有若干种能力,当然不同的球员的能力是不同的。我们关注的是球员的几项能力:速度,力量,技巧,视野,进攻,防守,团队配合能力。每种能力都有一个比重系数,当然对于不同的球队,各项能力所占的比重系数可能是不一样的,今天我们希望对那些著名球员们按综合能力进行一下排名,如果出现综合能力值相同的球员按照七项能力从前到后高的优先,如果仍旧有相同的则按名字的字典序从小到大排序。综合能力的计算方法是把各个能力按比重系数加权求和,所得结果即为该球员的综合能力值。

 

输入

    多组输入,相邻两组数据用空行隔开。每组输入的第一行为该球队球员各项能力所占的比重系数 ,7 个整数( [1,10] ),分别对应题目描述中的 7 项能力,用空格隔开。第二行是一个正整数 N 0 < N < 50 ),代表该球队要参与排名的球员总数,接下来 N 行,每行的有一个球员的名字,名字中间可能有空格,长度不超过 20 。再接下来 N 行,每行有一个跟上面 N 行中每行相对应的那名球员的各项能力的数据,每行 7 个用空格隔开的非负整数( [0,10] )。输入处理到文件结束为止。

输出

    每组数据对应一组输出,每组数据中按照输入顺序给出每个球员的综合能力和他在该组中的综合排名(从 1 开始),两者用空格隔开,每个球员的输出一行。每组数据最后输出一个空行。

示例输入

10 8 8 10 5 5 10
13梅西
佩德罗
比利亚
哈维
伊涅斯塔
蒂亚戈
马斯切拉诺
阿尔维斯
阿比达尔
皮克
普约尔
阿德里亚诺
巴尔德斯
10 9 10 9 10 8 10
8 8 8 8 8 7 9
8 9 8 7 7 6 7
8 8 9 10 9 8 10
8 8 9 9 10 8 10
8 8 8 7 7 7 7
7 7 8 8 6 7 8
8 9 8 8 7 8 8
6 7 8 8 8 8 8
7 8 9 8 8 10 8
8 7 6 8 7 10 8
6 7 8 8 7 8 7
7 10 8 8 8 9 8
9 10 9 8 6 5 8
5
C.罗纳尔多
本泽马
迪马利亚
厄齐尔
阿隆索
9 10 10 8 10 8 8
9 9 9 8 9 8 8
9 8 9 9 9 8 9
9 8 9 9 8 8 8
8 9 8 1
0 9 8 8

示例输出

532 1
453 6
421 9
501 2
496 3
418 11
415 12
451 7
420 10
456 5
429 8
405 13
459 4
499 14
74 3
480 2
466 5
472 4

提示


来源

tongjiantao

示例程序

#include <stdio.h>
#include <string.h>
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;
}


你可能感兴趣的:(编程,C语言)