约瑟夫环:设有N个人围成一个圈,约定从第几个人开始,数几个人会出圈,每个人的出圈顺序
我以C代码为例:
//约瑟夫环
#include<stdio.h>
void Jorephus(int a[],int sum,int m,int n){
int x,j;
while(sum>1){
m=(m+n-1)%sum;
x=a[m];
for(j=m;j<sum-1;j++){
a[j]=a[j+1];
}
a[j]=x;
sum--;
}
}
int main(void){
int a[100];
int i,j,m,n;
for(i=0;i<100;i++){
a[i]=i+1; //指定每个人编号
}
printf("请输入:第几个开始,数几个出圈");
scanf("%d %d",&m,&n);
Jorephus(a,100,m,n);
for(j=99;j>=0;j--){
printf("第%d个出圈->",a[j]);
}
return 0;
}
请输入:第几个开始,数几个出圈
3
4
第7个出圈->第11个出圈->第15个出圈->第19个出圈->第23个出圈->第27个出圈->第31个出圈->第35个出圈->第39个出圈->第43个出圈-> 第47个出圈->第51个出圈->第55个出圈->第59个出圈->第63个出圈->第67个出圈->第71个出圈->第75个出圈->第79个出圈->第83个出圈->第87个出圈->第91个出圈->第95个出圈->第99个出圈->第3个出圈->第8个出圈->第13个出圈->第18个出圈->第24个出圈->第29个出圈->第34个出圈->第40个出圈->第45个出圈->第50个出圈->第56个出圈->第61个出圈->第66个出圈->第72个出圈->第77个出圈->第82个出圈->第88个出圈->第93个出圈->第98个出圈->第4个出圈->第10个出圈->第17个出圈->第25个出圈->第32个出圈->第38个出圈->第46个出圈->第53个出圈->第60个出圈->第68个出圈->第74个出圈->第81个出圈->第89个出圈->第96个出圈->第2个出圈->第12个出圈->第21个出圈->第30个出圈->第41个出圈->第49个出圈->第58个出圈->第69个出圈->第78个出圈->第86个出圈->第97个出圈->第6个出圈->第20个出圈->第33 个出圈->第44个出圈->第57个出圈->第70个出圈->第84个出圈->第94个出圈->第9个出圈->第26个出圈->第42个出圈->第62个出圈->第76 个出圈->第92个出圈->第14个出圈->第36个出圈->第54个出圈->第80个出圈->第1个出圈->第28个出圈->第64个出圈->第90个出圈->第22 个出圈->第65个出圈->第5个出圈->第52个出圈->第16个出圈->第85个出圈->第73个出圈->第100个出圈->第48个出圈->第37个出圈->
--------------------------------
Process exited with return value 0
Press any key to continue . . .
3556

被折叠的 条评论
为什么被折叠?



