某地举行举重比赛,一共m人参加(参加人数介于1和100之间),规则如下:(1)所举起的重量从高到低排名,(2)所举重量相等时体重轻的胜出,(3)所举重量相等且体重一样时名次相同,某个名次有多人时会占用后续人员的名次(其中名次从1,2,3依次记录)。输入:人数m,接下来m行数据,每行包括两个正整数分别表示所举重量和体重。输出m行数据,每行包含3个整数(名次 所举重量 体重)。用c语言
时间: 2023-09-16 22:14:21 浏览: 55
高一英语人教版必修1《Unit 4 Earthquakes》教案:Period 1(1).doc
以下是一个简单的 C 语言代码实现:
```c
#include <stdio.h>
struct contestant { // 定义选手结构体
int weight;
int height;
int rank;
};
int main() {
int m;
scanf("%d", &m);
struct contestant arr[m];
for (int i = 0; i < m; i++) {
scanf("%d %d", &arr[i].weight, &arr[i].height);
arr[i].rank = 0; // 初始化排名为0
}
for (int i = 0; i < m; i++) {
for (int j = i + 1; j < m; j++) {
if (arr[i].weight < arr[j].weight || (arr[i].weight == arr[j].weight && arr[i].height > arr[j].height)) {
// 按规则比较选手重量和身高
struct contestant tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
int cur_rank = 1; // 初始化当前排名为1
for (int i = 0; i < m; i++) {
if (i == 0 || (arr[i].weight == arr[i-1].weight && arr[i].height == arr[i-1].height)) {
// 如果和前一个选手重量和身高相同,则与前一个选手排名相同
arr[i].rank = cur_rank;
} else {
arr[i].rank = ++cur_rank; // 更新当前排名
}
printf("%d %d %d\n", arr[i].rank, arr[i].weight, arr[i].height);
}
return 0;
}
```
该代码使用结构体存储每个选手的信息,并按照题目规则进行排序和排名,最后输出结果。
阅读全文