数学算法:
#include “stdio.h”
#include “stdlib.h”
int josephus(int n, int m)
{
int pos;
if (n == 1) {
return 1;
} else {
pos = (josephus(n-1, m) + m -1)%n + 1;
}
return pos;
}
int josephus_no_recurse_1(int n, int m)
{
int s = 0;
int i;
for (i=2; i<=n; i++) {
s = (s + m)%i;
}
return s + 1;
}
int josephus_no_recurse_2(int n, int m)
{
int s = 1;
int i;
for (i=2; i<=n; i++) {
s = (s + m -1)%i + 1;
if (s == 0) {
s = n;
}
}
return s;
}
/*
以前两个非递归的算法,在http://baike.baidu.com/view/717633.htm说: 我们需要对f[n]=(f[n-1]+k)%n式进行修正:
f[n]=(f[n-1]+k)%n;if(f[n]==0)f[n]=n;
测试时发现:需不需要修正是根据情况而定的--josephus_no_recurse_1这种不需要
*/
int main()
{
int n;
int m;
int i;
int count;
printf(“pls input total num:/n”);
scanf(“%d”, &n);
printf(“pls input a loop count:/n”);
scanf(“%