1185: 猴子选大王(结构体专题)c语言结构体实现代码
时间: 2023-06-21 11:12:35 浏览: 105
以下是一个简单的猴子选大王的结构体实现代码:
```c
#include <stdio.h>
#define MAX_MONKEYS 100
typedef struct monkey {
int id;
int rank;
} Monkey;
int main() {
int n, m;
Monkey monkeys[MAX_MONKEYS];
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
monkeys[i].id = i + 1;
monkeys[i].rank = 0;
}
int count = n;
int index = 0;
while (count > 1) {
if (monkeys[index].rank == -1) {
index = (index + 1) % n;
continue;
}
monkeys[index].rank++;
if (monkeys[index].rank == m) {
monkeys[index].rank = -1;
count--;
}
index = (index + 1) % n;
}
for (int i = 0; i < n; i++) {
if (monkeys[i].rank != -1) {
printf("%d\n", monkeys[i].id);
break;
}
}
return 0;
}
```
这个程序首先定义了一个结构体 `Monkey`,包含了每只猴子的编号和排名。然后通过输入猴子数量和每次淘汰的猴子数量,初始化了一个 `Monkey` 数组,每只猴子的排名初始化为 0。
接下来进入主循环,每次循环都将当前猴子的排名加 1,如果排名达到了要求,则将该猴子标记为已淘汰,并将计数器减一。循环结束后,只剩下一个猴子没有被淘汰,输出其编号即可。
需要注意的是,由于每次淘汰一个猴子后数组大小会减一,因此需要使用取模运算来循环访问数组中的元素。此外,为了标记已淘汰的猴子,可以将其排名设置为 -1。
阅读全文