20人从1到20编号围成一圈,从1开始,进行1、2报数,报到2的人出列,剩余的人继续从出列人的下一个人报数,则最后剩下的人的编号为多少。请用C语言写出对应程序
时间: 2024-05-06 07:20:25 浏览: 71
```c
#include <stdio.h>
int main() {
int n = 20; // 人数
int nums[20]; // 存储每个人的编号
int count = 0; // 报数计数器
int index = 0; // 当前报数的人的下标
int remain = n; // 剩余人数
// 初始化每个人的编号
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
// 循环报数直到只剩下一个人
while (remain > 1) {
// 如果当前报数的人还没有出列,则继续报数
if (nums[index] != 0) {
count++; // 报数加1
// 如果该人报到了2,则出列
if (count == 2) {
nums[index] = 0; // 标记为已出列
count = 0; // 计数器清零
remain--; // 剩余人数减1
}
}
index++; // 下一个人报数
if (index == n) { // 如果到了最后一个人,则从头开始报数
index = 0;
}
}
// 找到最后剩下的那个人的编号
for (int i = 0; i < n; i++) {
if (nums[i] != 0) {
printf("最后剩下的人的编号为:%d", nums[i]);
break;
}
}
return 0;
}
```
阅读全文