您的位置:首页 > 其它

约瑟夫问题

2016-01-26 21:56 267 查看
#include<iostream>

#include<cstdio>

#include<malloc.h>

using namespace std;

bool pd(int a[],int n);

int p(int a[],int n);

int main()

{

int n,m,a[302]={0},biao[302],i,j; //biao来表示a中的元素是否被使用过

//printf("请输入n,m");

scanf("%d%d",&n,&m);

for(i=1;i<=n;i++){a[i]=i;biao[i]=1;}

for(i=1,j=1;i<=m;) //i用来计数,j表示下标

{

if(i==m)

{

if(biao[j]!=0)

{

a[j]=0;

i=1;

biao[j]=0;

if(j==n)

{ if(pd(a,n)){break;}

j=1;

}

else

{

if(pd(a,n)){break;}

j++;

}

}

else

{

if(j==n)

{

if(pd(a,n)){break;}

j=1;

}

else

{

if(pd(a,n)){break;}

j++;

}

}

}

else

{

if(biao[j]!=0)

{ if(pd(a,n)){break;}

i++;

if(j==n)

{

if(pd(a,n)){break;}

j=1;

}

else{ if(pd(a,n)){break;}j++;}

}

else

{

if(j==n)

{ if(pd(a,n)){break;}

j=1;

}

else{if(pd(a,n)){break;}j++;}

}

}

}

printf("%d",p(a,n));

return 0;

}

int p(int a[],int n)

{

int i;

for(i=1;i<=n;i++)

{

if(a[i]!=0){return i;}

}

return 0;

}

bool pd(int a[],int n)

{

int i,sum=0;

for(i=1;i<=n;i++)

{

if(a[i]!=0){sum++;}

}

if(sum==1){return true;}

else{return false;}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: