主题:困扰我两天的难题
chenjieysu
[专家分:0] 发布于 2009-03-19 16:45:00
已经学到了函数这一章,做练习的时候遇到了一道题,希望高手们能指点迷津。
问题:13个人围成一圈,从第一个人开始按顺序报数1,2,3,每当报到3时,这个人就退出,求最后留在圈子的人的编号。我算出来是第13个人,但是用C++程序如何实现呢?我试过数组,vector,但是还没有找到解法,希望高手能解答,谢谢![em1]
回复列表 (共4个回复)
沙发
星绽紫辉 [专家分:1700] 发布于 2009-03-19 17:49:00
呵呵,不就是猫吃老鼠吗,我做过,很简单的。。。
板凳
chenjieysu [专家分:0] 发布于 2009-03-19 23:14:00
麻烦高手指点一番吧,我是实在不会了
3 楼
sssessse [专家分:70] 发布于 2009-03-20 01:30:00
用一个一维数组应该可以
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 楼
破坏使者 [专家分:0] 发布于 2009-03-21 14:15:00
这个问题网上有很多的例子,找就可以找到了。我自己就有两个例子了。自己去找吧~~~~不能培养你的懒惰 呵呵~~~
我来回复