问朋友们个技术性的问题,圈人...........................

zhangyafei13 2010-05-23 09:48:31
刚学习C语言没多久,看到朋友的贴子里有这样个问题,也很是好奇,想了解了解。


13个人围成一圈,从第一个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人。/

可以这样理解,就是说现在第三个人退出,从第四个人开始报1,第五个人报2,第六个人退出,依次,不知哪位仁兄能写出代码,在此先谢了。。。。
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
黑娃 2010-05-23
  • 打赏
  • 举报
回复
int r[13] = {1,1,..//13个1};
int flag = 0;//作为标记,每当增加到3,就删除一个人,并重置标记为0
for (int i = 0; i < 13; ++i, ++flag)//遍历一遍后,数组r中值为1的是剩下的人
if (flag == 3)
{r[i] = 0; flag = 0;}
...
//以上只遍历了一遍的情形

chaoliu1024 2010-05-23
  • 打赏
  • 举报
回复
cliffbaby 2010-05-23
  • 打赏
  • 举报
回复

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int m,n,temp;// m 次传递,n 个人
vector<unsigned int> ivec;
vector<unsigned int>::iterator point;
cout << "依次输入 次数 和 人数 :" ;
while(cin >> m >> n)
{
for(int i=1;i<=n;i++)
ivec.push_back(i);
point = ivec.begin();
cout << "退出顺序:";
while(ivec.size()!=1)
{ temp = m-1;
while(temp--)
{
point++;
if(point == ivec.end())
point = ivec.begin();
}//while(temp--)
cout << *(point) << ends;//输出退出顺序
point = ivec.erase(point);
if(point == ivec.end())point = ivec.begin();
}//while(ivec.size()!=1)
cout << endl << "最后剩下" << ivec[0] << endl << "依次输入 次数 和 人数 :";
ivec.clear();
}//while(cin >> m >> n)
return 0;
}

我编的代码,不知道是不是你想要的。
stilling2006 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhzxlc_06 的回复:]
Google一下:约瑟夫环问题
http://topic.csdn.net/u/20100512/00/2DEBCEC4-016D-432C-8ED1-5B24EE559856.html
[/Quote]
大家都已经回答出了~hehe
huanmie_09 2010-05-23
  • 打赏
  • 举报
回复
akonlbjrd 2010-05-23
  • 打赏
  • 举报
回复
约瑟夫。。

64,439

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧