约瑟夫问题巴拉巴拉

有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。

#include <stdio.h>
#include <stdlib.h>
int num[1000000];
int main()
{
    int i,k,m,n;
    int *p;

    scanf("%d",&n);
    p=num;
    for(i=0;i<n;i++)
        *(p+i)=i+1;//以1到n为序给每个人编号
    i=0;//i为每次循环的变量
    k=0;//k按1,2,3报数时的计数变量
    m=0;//m为退出人数
    while(m<n-1)//当退出人数比n-1小时(即为退出人数大于1时)执行循环体
    {
        if(*(p+i)!=0) k++;
        if(k==3)
        {
            *(p+i)=0;//退出人数标号置为0
            k=0;
            m++;
        }
        i++;
        if(i==n) i=0;//报数到尾后,i恢复为0
    }
    while(*p==0) p++;
    printf("%d",*p);
}
 

发布了19 篇原创文章 · 获赞 7 · 访问量 483

猜你喜欢

转载自blog.csdn.net/pipi_lovelygirl/article/details/105648044