#include <stdio.h>
#define N 100
int main()
{
int a[N]={1};
int *p=a;
int i,n;
static int counter=0;
int leap=1,space_counter;
printf("pls enter number n:");
scanf("%d",&n);
for(i=1;i<n;i++)
p[i]=p[i-1]+1;
while(leap)
{
space_counter=0;
for(i=0;i<n;i++)
{
if(p[i]!=0)
{
counter++;
if(counter%3==0)
p[i]=0;
}
else space_counter++;
}
if(space_counter>=n-1)
leap=0;
}
for(i=0;i<n;i++)
if(p[i]!=0)
printf("The result is %d",p[i]);
return 0;
}
上面是用模拟方法做出来的。看了别人的方法之后觉得很低级。
在网上看到一个用递推的解法。
for(i=2;i<=n;i++)
a[i]=(a[i-1]+k-1)%i+1; 其中k为你循环个数3
最后输出a[n]就是你想要的结果。
具体的分析方法见下面链接
约瑟夫环
http://zhidao.baidu.com/question/53397409.html
[[it] 本帖最后由 soler 于 2009-8-2 19:46 编辑 [/it]]