#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{ void joseph(int n, int m);
int num,t;
printf("输入总人数:");
scanf("%d",&num);
printf("输入出局号:");
scanf("%d",&t);
joseph(num, t);
}
void joseph(int n, int m)
{
int status[100]= {0};//未出局的人标记为0,出局的人标记为其出局次序
int count=0;
int i=p=j=-1;
printf("出局次序:\n");
while(count < (n-1))//剩最后一个不用数
{
p=0;
while(1)
{
i = (i+1) % n;//当位数超过人数时从第一个再开始
if(status[i] == 0)//没被踢出去
{
p++;//指针位置移动
}
if(p == m)
{
count++;//被踢出去得次序
status[i] = count;//被踢出去
printf("第%d位出局:%d号\n",count,i+1);
break;
}
}
}
for(j=0; j<n; j++)
{
if(status[j] == 0)
{
printf("胜利者:%d号\n",j+1);
}
}
}
C语言乔瑟夫问题
最新推荐文章于 2022-03-03 00:24:56 发布