约瑟夫环(动态内存)

只谈情不闲聊 提交于 2019-12-02 11:31:48
//约瑟夫环
#include<stdio.h>
int main()
{
    int i,k,m,n,num[50],* p;
    printf("n=");
    scanf("%d",&n);
    p=num;
    for(i=0;i<n;i++)//向每个人赋序号 
        * (p+i)=i+1;//数组中第0个是序号1 
    i=0;
    k=0;
    m=0;
    while(m<n-1)//即未退出人数大于1时执行函数 
    {
        if(* (p+i)!=0)//没有走的人加1 
            k++;
        if(k==3)//第三位退出圈子 
        {
            * (p+i)=0;///赋值0就是退出圈子 
            k=0;//k是点名计算的人数 
            m++;//m为退出人数 
        } 
        i++;//每次循环的人数 
        if(i==n)//循环一遍后回到开始位置 
            i=0;
    }
    while(* p==0)
        p++;
    printf("号码是%d\n",* p);
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!