用c语言编写程序实现某地举行举重比赛,一共m人参加(参加人数介于1和100之间),规则如下:(1)所举起的重量从高到低排名,(2)所举重量相等时体重轻的胜出,(3)所举重量相等且体重一样时名次相同,某个名次有多人时会占用后续人员的名次(其中名次从1,2,3依次记录)。输入:人数m,接下来m行数据,每行包括两个正整数分别表示所举重量和体重。输出m行数据,每行包含3个整数(名次 所举重量 体重)。 【样例输入】:6 305 76 315 75 310 78 305 78 315 75 305 78 【样例输出】:1 315 75 1 315 75 3 310 78 4 305 76 5 305 78 5 305 78
时间: 2023-11-27 11:53:23 浏览: 88
这道题可以使用结构体来存储每个人的信息,然后按照题目要求进行排序。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
typedef struct {
int weight;
int strength;
int rank;
} Person;
Person people[MAX_N];
int cmp(const void* a, const void* b) {
Person* p1 = (Person*)a;
Person* p2 = (Person*)b;
if (p1->strength != p2->strength) {
return p1->strength - p2->strength;
} else if (p1->weight != p2->weight) {
return p1->weight - p2->weight;
} else {
return 0;
}
}
int main() {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", &people[i].strength, &people[i].weight);
people[i].rank = -1;
}
qsort(people, n, sizeof(Person), cmp);
int cur_rank = 1;
int cur_weight = -1;
for (int i = 0; i < n; i++) {
if (people[i].weight != cur_weight || i == 0) {
cur_rank = i + 1;
cur_weight = people[i].weight;
}
people[i].rank = cur_rank;
}
for (int i = 0; i < n; i++) {
printf("%d %d %d\n", people[i].rank, people[i].strength, people[i].weight);
}
return 0;
}
```
首先定义了一个 `Person` 结构体来表示每个人的信息,包括所举重量 `strength`、体重 `weight` 和名次 `rank`。注意在输入时要将名次初始化为 -1。
然后定义了一个比较函数 `cmp`,用于排序。按照题目要求,先按照所举重量从高到低排名,如果所举重量相等,再按照体重从轻到重排名。如果两个人所举重量和体重都相等,则认为他们名次相同。
接着,使用 `qsort` 函数进行排序,并依次计算每个人的名次。如果发现当前人的体重与上一个人不同,就更新当前名次和当前体重。
最后,输出每个人的名次、所举重量和体重即可。
阅读全文