c语言题目描述 用指针实现:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 输入 最初总人数n(2≤n≤100)。 输出 最后留下的人在最初所排的序号。 样例输入 11
时间: 2023-12-27 08:10:32 浏览: 32
有100个人围成一个圈,从1开始报数,报到14的这个人就要退出
5星 · 资源好评率100%
好的,这是一个经典的约瑟夫问题,下面是C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("请输入总人数n:");
scanf("%d", &n);
int* nums = (int*)malloc(n * sizeof(int)); // 动态分配数组
for (int i = 0; i < n; i++) {
nums[i] = i + 1; // 初始化数组
}
int count = 0; // 计数器
int index = 0; // 数组下标
while (n > 1) {
if (nums[index] != 0) {
count++;
if (count == 3) {
nums[index] = 0; // 标记为已退出
count = 0;
n--;
}
}
index++;
if (index == n) { // 循环
index = 0;
}
}
for (int i = 0; i < n; i++) {
if (nums[i] != 0) {
printf("最后留下的人在最初所排的序号为:%d\n", nums[i]);
break;
}
}
free(nums); // 释放内存
return 0;
}
```
输入样例:
```
请输入总人数n:11
```
输出样例:
```
最后留下的人在最初所排的序号为:7
```
阅读全文