/* 约瑟夫环问题:用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出
* 另一个表述:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),
* 从第1号开始报数,一直数到m,数到m的猴子退出圈外,
* 剩下的猴子再接着从1开始报数。
* 就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,
* 编程求输入n,m后,输出最后猴王的编号。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void Game(int n,int m)
{
int i;
int addr = 0;
int count = 0;
int del = 0;
int *arry = (int *)malloc(sizeof(int)*n);
for(i=0; i<n; i++)
{
arry[i] = i+1;
}
while(del < n)
{
if(-1 != arry[addr])
{
count++;
if(m+1 == count)count = 1;
if(m == count)
{
printf("%d\t",arry[addr]);
arry[addr] = -1;
del++;
}
}
addr++;
if(n == addr)addr = 0;
}
}
int main(int argc, char *argv[])
{
int n,m;
n = atoi(argv[1]);
m = atoi(argv[2]);
Game(n,m);
printf("\n");
}
约瑟夫环问题
最新推荐文章于 2022-05-04 19:46:17 发布