c实现 n个人围一圈报数,报道3退出,最后剩下一个人编号是几编程
时间: 2023-05-27 20:02:05 浏览: 60
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, m = 3; // m为数到几退出
printf("请输入参与游戏的人数: ");
scanf("%d", &n);
int* circle = (int*) malloc(n * sizeof(int)); // 动态分配数组
for (int i = 0; i < n; i++) {
circle[i] = i + 1; // 给每个人编号
}
int count = 0, index = 0, left = n; // count为报数,index为当前的位置,left为剩余的人数
while (left > 1) { // 当剩余人数大于1时继续游戏
if (circle[index] != 0) { // 如果当前位置还有人
count++; // 报数加1
if (count == m) { // 报数到m时,该人出局
circle[index] = 0; // 标记为出局
count = 0; // 重置报数
left--; // 剩余人数减1
}
}
index++; // 往下一个人走
if (index == n) { // 走到最后一个人后,从头开始
index = 0;
}
}
for (int i = 0; i < n; i++) { // 找出最后留下的那个人的编号
if (circle[i] != 0) {
printf("最后留下的人的编号是: %d\n", circle[i]);
break;
}
}
free(circle); // 释放动态分配的内存
return 0;
}