约瑟夫环问题
#include<stdio.h>
#include<stdlib.h>
void sort(int n, int start, int a)
{
int i, mark, out, *p;
p = (int *)malloc(n*sizeof(int));
for (i=0; i < n; i++)
{
*(p + i) = i + 1;
}
i = start-1;
mark = 0;
out = 0;
while (out<n - 1)
{
if (*(p + i) != 0)
mark++;
if (mark == a)
{
out++;
printf("第%d个出局的是:%d\n", out, p[i]);
*(p + i) = 0;
mark = 0;
}
i++;
if (i == n)
i = 0;
}
while (*p == 0)
{
p++;
}
printf("最后剩下的是:%d\n", *p);
}
int main()
{
void sort(int n, int start, int a);
int n, a, start;
printf("请输入围城圈的人数:");
scanf("%d", &n);
printf("请输入从第几个人开始报数:");
scanf("%d", &start);
printf("报到哪个数后出局::");
scanf("%d", &a);
sort(n, start, a);
}
约瑟夫环问题 有 n 个人围成一圈,顺序排号。从第 1 个人开始报数,从 1 到 3 报数,凡是 报到 3 的人退出圈子,问最后留下的是原来的第几号?
于 2020-03-02 23:51:12 首次发布