C语言解决世界杯小组赛问题
题目:
世界杯小组赛(胜得3分,平得1分,负不得分),计算每个队的积分并按排名先后输出,若积分相同,则按净球数排序(保证积分相等时输入的净球数不相等)。输入M个队,出线队N个,输出出线的队的排名、名称、积分、净球数。
输入说明:
名称 胜 平 负 进球数 负球数
输入样例:
输出样例:
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 100
struct WorldCup//建立结构体
{
char country[10];
int score[10];
int grade;
int win;
};
void main()
{
struct WorldCup w[M], temp;
int m, n, i, j, k, number = 1;
scanf("%d %d", &m, &n);
for(i = 0; i < m; i++) {
scanf("%s", w[i].country);
for(j = 0; j < 5; j ++) {
scanf("%d", &w[i].score[j]);
}
w[i].grade = 3 * w[i].score[0] + w[i].score[1];
//计算每个队的积分
w[i].win = w[i].score[3] - w[i].score[4];
//计算每个队的净球数
}
for(i = 0; i < m - 1; i++) {
k = i;
for(j = i + 1; j < m; j++) {
if(w[i].grade > w[k].grade) k = j;
else if(w[i].grade == w[k].grade && w[j].win > w[k].win) k = j;
}
if(k != i) {
temp = w[k];
w[k] = w[i];
w[i] = temp;
}
}
for(i = 0; i < n; i++) {
printf("%d %s %d %d \n",number++,w[i].country,w[i].grade,w[i].win);
}
//输出前N个队伍
system("pause");
}
运行结果