算法之约瑟夫环

约瑟夫环:设有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
47个出圈->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 . . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值