鱼C论坛

 找回密码
 立即注册
查看: 2616|回复: 3

约瑟夫问题

[复制链接]
头像被屏蔽
发表于 2011-4-23 22:09:03 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-4-24 15:01:21 | 显示全部楼层
回复 wuxiaojun 的帖子

#include <stdio.h>
void main()
{
        int i,k,m,n,num[50],*p;
        printf("input the number of person:n=");
        scanf("%d",&n);
        p=num;
        for(i=0;i<n;i++)
        {
                *(p+i)=i+1;
        }
        i=0;
        k=0;
        m=0;
        //m为出圈的人数,n为总人数,因为最后要剩下一个,所以m<n-1
        while(m<n-1)
        {
                //k是要1 2 3,当当前位置的指针的值不是0的时候,k++
                if(*(p+i)!=0) k++;
                //数到3的人出圈,把该位置的指针的值赋0
                if(k==3)
                {
                        *(p+i)=0;    //k=3的时候,把当前的指针的值赋0
                        k=0;            //从头开始数
             m++;          //出圈的人数加1
                }
                i++;                  //数了多少
                if(i==n)             //数到最后一个人,(包括已经是0的位置)数了一圈,把i=0,进入下一圈
                        i=0;
        }
        while(*p==0) p++;    //找到指针的值不是0的, 就是剩下的人
        printf("the last one is N0.%d\n",*p);
}
因为这个程序是数到3的人出圈, 把数到3的对应的当前指针的值等于0,在从1开始数, 如果数到最后了, 就从头开始(i=n),这是就要把指针是0的跳过( if(*(p+i)!=0) k++;),继续, 把数到3的位置的值等于0,到最后剩下一个人的时候跳出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
 楼主| 发表于 2011-4-26 19:22:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2015-12-14 16:26:39 | 显示全部楼层
:shock::shock::shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 05:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表