您的位置:首页 > 其它

约瑟夫换问题

2016-05-22 19:27 197 查看
n个人围城一个圆圈,从1开始报数,报m的人将会死去,然后再从1开始报,输出死亡的顺序。

输入:总人数n,报数的上限m

输出:淘汰的顺序。

#include <stdio.h>

#include <stdlib.h>

int main(int argc,char **argv)

{

    int n,m;

    printf("输入参与游戏的人数\n");

    scanf("%d",&n);

    printf("输入报的数\n");

    scanf("%d",&m);

    int *arry=(int *)malloc(sizeof(int)*n);

    for(int i=0;i<n;i++)

    {

        arry[i]=0;        //初始数组为0,表示人活着

    }

    int death=0;        //记录死亡的人数

    int index=0;        //用来枚举圈中的所有位置

    int numb=0;            //用来记录当前所报的数

    while(death!=n)        //当死亡人数没有达到总数n时

    {

        index=index+1;    //报数从1开始

        if(index>n)

        {

            index=1;    //构成循环

        }

        if(arry[index-1]==0) //说明第t个位置上有人,此人报数

        {

            numb=numb+1;  //报数加1

        }

        if(numb==m)         //此人报数为m,此人死去

        {

            numb=0;                    //报数清零

            printf("%d\t",index);    //输出编号

            arry[index-1]=1;            //标记记为1,表示该人死去

            death=death+1;            //死亡人数加1

        }

    }

    printf("\n");

    free(arry);

    return 0;

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