C++ 结构有n个人围成一圈,顺序排号。从第一个开始报数(从1到3报数),凡报到3的人退出圈子,(用结构)

有n个人围成一圈,顺序排号。从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。(用结构)... 有n个人围成一圈,顺序排号。从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。(用结构) 展开
 我来答
百度网友4ebf3c0c9
2014-06-13 · 超过11用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:30万
展开全部
int g_all_num = 0;//记录当前所有人数
int g_now=0;//人数计数 将g_now==3 的人的
struct Number
{
bool bOut;//是否已退出

int iSelf;//记录自己位置
Number* next;//指向下一个
};
用上面结构体做个链表,添加所有人,做成圆形链表
//一次踢人判断如下
Number* tNumber = ***;//链表的元素
if(g_all_num==1)
{
if(!tNumber->bOut)//这个人未被T

{

g_now++;
if(g_now == 3)

{
g_all_num --;

tNumber->bOut = true;//T掉这个人
g_now = 0;
}
}
// 这边跳到链表下个元素 再进行t人判断

}
else
{
//已经结束 当前这个的为最后剩下的

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2018-03-13
展开全部
//创建含有n个节点的环形链表,每次在这个链表中删除第m个节点,返回最后剩下的节点。
#include <iostream>
#include <list>
#include <numeric>
#include <algorithm>
using namespace std;
int fun(unsigned int n, unsigned int m)
{
if (n<1 ||m<1)
{
return -1;
}
unsigned int i = 0;
list<int>numbers;
for (i = 0;i<n; ++i)
{
numbers.push_back(i);
}
list<int>::iterator current = numbers.begin();
while (numbers.size()>1)
{
for (int i = 1;i<m; ++i)
{
current++;
if (current == numbers.end())
{
current = numbers.begin();
}
}
list<int>::iterator next = ++current;
if (next == numbers.end())
{
next = numbers.begin();
}
--current;
numbers.erase(current);
current = next;
}
return *current;
}
int main(int argc, char* argv[])
{
int nLeave = fun(10, 3);
printf("如果n = 10,数到3的人退出,最后剩下的是%d\n", nLeave );
return 0;
}
帮你打了半天,给分哦~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式