13个人围成一圈,从第一个人开始顺序报号1,2,3。凡是报到3都退出圈子,找出最后留在圈子中的人原来的序号C代码分析
时间: 2023-11-23 12:27:52 浏览: 30
以下是使用 C 语言循环方式的代码实现:
```c
#include <stdio.h>
int last_person(int n, int m) {
int i, p = 0;
for (i = 2; i <= n; i++) {
p = (p + m) % i;
}
return p;
}
int main() {
int n = 13; // 总人数
int m = 3; // 报数到 m 退出
int result = last_person(n, m);
printf("最后留在圈子中的人原来的序号为: %d\n", result+1);
return 0;
}
```
解释一下代码:`last_person(n, m)` 函数的作用和上面 Python 版本的 `last_person` 函数相同,即求解在 n 个人围成一圈时,每报到第 m 个人就退出圈子,最后留在圈子中的人原来的序号。循环中的变量 i 表示当前圈子中人数,初始值为 2,因为圈子中至少有两个人。变量 p 表示上一轮退出圈子的人的序号,初始值为 0,因为第一轮从第 0 个人开始报数。循环中每次报数到第 m 个人,就将该人退出圈子,因此下一轮圈子中的人数为 i-1,下一轮从第 (p+m)%i 个人开始报数。最后,循环结束时,圈子中只剩下一个人,他就是最后留在圈子中的人,因此返回 p 的值即可。注意,最后留在圈子中的人原来的序号为 p+1。
相关问题
13个人围成一圈,从第一个人开始顺序报号1,2,3。凡是报到3都退出圈子,找出最后留在圈子中的人原来的序号代码分析
这是一个经典的约瑟夫问题,可以使用递归或循环的方式来解决。以下是使用 Python 语言递归方式的代码实现:
```python
def last_person(n, m):
if n == 1:
return 0
else:
return (last_person(n - 1, m) + m) % n
n = 13 # 总人数
m = 3 # 报数到 m 退出
result = last_person(n, m)
print("最后留在圈子中的人原来的序号为:", result+1)
```
解释一下代码:`last_person(n, m)` 函数的作用是求解在 n 个人围成一圈时,每报到第 m 个人就退出圈子,最后留在圈子中的人原来的序号。当 n=1 时,只有一个人,他就是最后留在圈子中的人,因此返回 0。当 n>1 时,假设前 n-1 个人围成的圈子中最后留下的人的序号为 x,则在 n 个人围成的圈子中最后留下的人的序号为 `(x+m)%n`。例如,当 n=4,m=3 时,前三个人依次退出圈子,圈子中剩下的人依次为 4,1,2,因此最后留下的人原来的序号为 2。
13个人围成一圈,从第一个人开始顺序报号1、2、3,凡是报到“3”的人退出圈子,找出最后留在圈子里的人原来的序号,用c语言的指针方法来写
这是经典的约瑟夫问题,可以使用链表或者数组模拟,这里演示使用数组的方法。
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 13; // 总人数
int m = 3; // 报到3的人出圈
int i, j, k;
int *a = (int *)malloc(n * sizeof(int)); // 动态分配数组空间
for (i = 0; i < n; i++)
{
a[i] = i + 1; // 初始化数组
}
i = 0; // i 表示当前报数的人在数组中的下标
j = 0; // j 表示已经出圈的人数
while (j < n - 1)
{
k = 0;
while (k < m)
{
if (a[i] != 0) // 如果这个人还在圈子里
{
k++;
}
if (k == m) // 如果报到3了
{
printf("%d 出圈\n", a[i]);
a[i] = 0; // 标记为已出圈
j++;
}
i++;
if (i == n) // 如果已经报完一圈了,从头开始
{
i = 0;
}
}
}
for (i = 0; i < n; i++) // 找出最后留在圈子里的人
{
if (a[i] != 0)
{
printf("最后留在圈子里的人是原来的第 %d 个人\n", a[i]);
break;
}
}
free(a); // 释放数组空间
return 0;
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)