题目:
世界杯小组赛(胜得3分,平得1分,负不得分),计算每个队的积分并按排名先后输出,
若积分相同,则按净球数(保证积分相等时输入的净球数不相等)。
输入M个队,出线队N个,输出出线的队伍的排名、名称、积分、净球数。
输入说明
名称 胜 平 负 进球数 负球数
输入样本
4 2
德国 1 1 0 9 3
俄罗斯 1 0 0 2 1
威尔士 1 1 1 10 2
芬兰 0 1 0 3 3
输出样本
1 威尔士 4 8
2 德国 4 6
思路:
建立一个小组队伍结构体(包含国家名,胜负场数,进球数,负球数,积分,净球数),采用冒泡排序根据小组队伍的积分和净球数(积分相同,按净球数排名)排名。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 100
struct WorldCup
{
char country[10];
int win[10]; //胜负场数,进球数,负球数
int grade; //积分
int goal; //净球数
};
int main()
{
int m,n;
struct WorldCup w[M],temp;
scanf("%d %d",&m,&n); //输入队伍数,出线队数
for(int i=0;i<m;i++)
{
scanf("%s",w[i].country);
for(int j=0;j<5;j++)
scanf("%d",&w[i].win[j]); //胜负场数,进球数,负球数
w[i].grade=3*w[i].win[0]+w[i].win[1]; //积分
w[i].goal=w[i].win[3]-w[i].win[4]; //净球数
}
for(int i=0; i<m-1;i++) //冒泡排序,积分从大到小
{
for(int j=m-1;j>i;j--)
{
if(w[j].grade>w[j-1].grade||w[j].grade==w[j-1].grade && w[j].goal>w[j-1].goal)
{
temp=w[j];
w[j]=w[j-1];
w[j-1]=temp;
}
}
}
for(int k=0;k<n;k++)
{
printf("%d %-3s %d %d\n",k+1,w[k].country,w[k].grade,w[k].goal);
}
}