标题:约瑟夫问题求解(真心想不出来了)
取消只看楼主
qq799433746
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-3-31
结帖率:0
已结贴  问题点数:20 回复次数:0 
约瑟夫问题求解(真心想不出来了)
程序代码:
#include"stdio.h"
int ant(int n[])//统计函数
{
    int i;
    for(i=0;;)
    {
     if(n[i]==0)
     i++;
     else
     return i;
    }
}
int main()
{  

    int man[200]={0};//游戏人数
    int die=0;//每隔die人死一个
    int k=1;//k为报数计数器
    int t=0;//剩余人数
    int y=0;//人数
    int i=0;//此时轮到报数者
    int z=0;
    printf("请输入游戏人数与报数轮数:");
    scanf("%d %d",&y,&die);//输入游戏人数
    for(i=1;i<=y;i++)
    {
        man[i]=1;//。。。对数组初始化
        //printf("%d",man[i]);
    }
    t=i-1;//让T接任I
    i=1;//清零
     while(t>1)//当游戏人数大于1时开始循环
   {
       if(i==y&&k%die!=0)//此人是否为队伍的最后一人
          {
          i=1;//回去重报
          k++;
          continue;//重新循环
          }
       else if(k%die==0)
          {
          man[i]=0;//这货挂了
          k=1;//报数清0
          t--;//游戏人数减少
          i=1;
          continue;
          }
       if(man[i]!=0&&k%die!=0)//如果此人不为空
          {
          k++;//接着报
          i++;//下一位
          continue;
          }
       if(k%die==0)//此人为要死者
          {
          man[i]=0;//这货挂了
          k=1;//报数清0
          t--;//游戏人数减少
          i++;//下一位!!
          continue;
          }
       if(man[i]==0)//此人是否挂了
          {
          i++;//直接下一位
          continue;
          }
   }
   for(i=1;i<y;i++)
   {
   printf("%d",man[i]);
   }
   z=ant(man);//统计剩下那货是谁
   printf("\t%d",z);
   return 0;
}
试过很多办法但现在不知道哪里错了
搜索更多相关主题的帖子: 约瑟夫 真心 
2013-03-31 18:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-402522-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.760448 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved