回 帖 发 新 帖 刷新版面

主题:困扰我两天的难题

已经学到了函数这一章,做练习的时候遇到了一道题,希望高手们能指点迷津。
问题:13个人围成一圈,从第一个人开始按顺序报数1,2,3,每当报到3时,这个人就退出,求最后留在圈子的人的编号。我算出来是第13个人,但是用C++程序如何实现呢?我试过数组,vector,但是还没有找到解法,希望高手能解答,谢谢![em1]

回复列表 (共4个回复)

沙发

呵呵,不就是猫吃老鼠吗,我做过,很简单的。。。

板凳

麻烦高手指点一番吧,我是实在不会了

3 楼


用一个一维数组应该可以

int i = 13;//i表示人数,【数组里每一个数的的值】权且做一个开关 【值】== 0 说明这个人已被从组里踢出

int last = i;//每退一人自减一只剩一人时,开始统计看看谁还在

int Kill3[i];//之后每一项都初始化值为1

然后就用一个for循环吧,

每数到三时看看 该数的值是否为零,不为零者赋值为零(相当于T出队伍)

直到最后一人
[code=c]

int KG_yy = 0;//【开关】不为零循环退出
i = 0;

for(int k = 1;; KG_yy == 0; )
{
     if(i > 12)
     {
           i = 0;
     }
     if(k > 3)
     {
           k = 1;
     }
     if(   k == 3&&Kill3[i] == 1   )
     {
           Kill3[i] = 0;
           last -= 1;
           if (last == 1)
           for (int m = 0; m < 13; m++)//统计看看谁的值不为零
           {
                 if (Kill[m] == 1)
                 {
                        KG_yy = -1;//【开关】关
                        cout<<"剩下的人是:"<<m+1<<endl;
                 }
           }
     }else{
          i += 1;
          for(int KG_A = 0;KG_A == 0;)
          {
                if(i > 12)
                {
                        i = 0;
                }
                if(Kill3[i] == 1)
                {
                        Kill3[i] = 0;
                        KG_A = -1;//【开关】关
                        
                        last -= 1;
                        if (last == 1)
                        for (int m = 0; m < 13; m++)//同样,统计看看谁的值不为零
                        {
                              if (Kill[m] == 1)
                              {
                                     KG_yy = -1;//【开关】关
                                     cout<<"剩下的人是:"<<m+1<<endl;
                              }
                        }

                }
                i += 1;
          }
     }
     i += 1;k += 1;        
}
[/code]

先声明我是一时兴起写的,写完都半夜一点多了也没编译,出错的话意程序主旨也是清楚的;反正我写完就后悔了……网上都有教程来着%>_<%。
晚安

4 楼

这个问题网上有很多的例子,找就可以找到了。我自己就有两个例子了。自己去找吧~~~~不能培养你的懒惰  呵呵~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册