h0181. 约瑟夫问题C语言编程代码
时间: 2024-09-19 13:11:10 浏览: 30
约瑟夫环(Josephus Problem)是一个经典的算法问题,它描述了一个游戏场景:一群人站成一圈,从某个固定的人开始报数,每次跳过指定的人数直到只剩一人,最后活下来的就是赢家。在C语言中,你可以通过循环和条件判断来解决这个问题。下面是一个简单的实现:
```c
#include <stdio.h>
int josephus(int n, int k) {
if (n <= 1 || k <= 0) {
printf("Invalid input: At least one person should be present and step must be greater than 1.\n");
return -1;
}
int current = 0; // 当前轮到的人
while (n > 1) {
current = (current + k - 1) % n; // 报数并更新当前人
n--;
}
printf("The last person standing is number %d\n", current + 1); // 返回最后一个存活者
return current;
}
int main() {
int num_people, skip;
printf("Enter the total number of people and the step to skip: ");
scanf("%d %d", &num_people, &skip);
int result = josephus(num_people, skip);
if (result != -1) {
printf("Program executed successfully.\n");
}
return 0;
}
```
在这个程序中,`josephus`函数接受两个参数,`n`表示人数,`k`表示需要跳过的人数。当圈里只剩一个人时,函数返回这个人。