约瑟夫问题

来源:互联网 发布:数据库面试问答题 编辑:程序博客网 时间:2024/06/03 20:34

    尽情的输出吧,输出自己的文字。约瑟夫问题:两个要点:怎么找出出局的人,怎么找出未出局的人。使用标记。

#include <stdio.h>#include <stdlib.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;//以1至n为序给每个人编号    i=0;//i为每次循环时计数变量    k=0;//k为按1,2,3报数时的计数变量    m=0;//m为退出人数    //printf("%d\n",p); 查看p的地址    while(m<n-1)   //只留最后一个人    {        if(*(p+i)!=0)            k++;        if(k==3)        {            printf("出局人序号:%d\n",*(p+i));            *(p+i)=0;   //标记为0            k=0;            m++;        }        i++;        if(i==n)            i=0;    }    //找出不为值的人    while(*p==0)        p++;    printf("最后留下的人的编号是:%d\n",*p);    return 1;}

显示结果




0 0
原创粉丝点击