C语言4. 报数:有 n 个人围成一圈,按顺序从 1 到 n 编好号。从第一个人开始报数,报到 m(m<n) 的人退出圈子,下一个人从 1 开始报数,报到 m 的人退出圈子。如此下去,直到留下最后一 个人。输入整数 n 和 m,并按退出顺序输出退出圈子的人的编号。试编写相应程序。
时间: 2024-05-10 10:17:29 浏览: 82
以下是 C 语言的代码实现:
```c
#include<stdio.h>
int main(){
int n, m;
printf("请输入总人数 n 和报数上限 m:");
scanf("%d %d", &n, &m);
// 定义一个数组,存储每个人的编号
int nums[n];
for(int i = 0; i < n; i++){
nums[i] = i + 1;
}
int count = 0; // 计数器
int index = 0; // 当前报数的人的下标
int left = n; // 剩余的人数
while(left > 1){
if(nums[index] != 0){ // 如果当前人还在圈子里
count++;
if(count == m){ // 如果报到 m,那么将该人从圈子中删除
printf("%d ", nums[index]);
nums[index] = 0;
left--;
count = 0;
}
}
index++;
if(index == n){ // 如果已经到了最后一个人,则从头开始报数
index = 0;
}
}
// 输出最后剩下的人的编号
for(int i = 0; i < n; i++){
if(nums[i] != 0){
printf("%d\n", nums[i]);
break;
}
}
return 0;
}
```
思路:使用一个数组存储每个人的编号,然后从第一个人开始报数,每次报到 m 的人就将其从数组中删除。然后从下一个人开始重新报数,直到只剩下最后一个人为止。
阅读全文