您的位置:首页 > 编程语言 > C语言/C++

C++链表实现猴子报数

2020-04-05 07:27 507 查看

猴子报数
n个猴子围坐一圈并按照顺时针方向从1到n编号,从第s个猴子开始进行1到m的报数,报数到第m的猴子退出报数,从紧挨它的下一个猴子重新开始1到m的报数,如此进行下去知道所有的猴子都退出为止。求给出这n个猴子的退出的顺序表。

#include<bits/stdc++.h>
using namespace std;

struct mo {
int num;
struct mo* next;
bool f;  //false跳出
};

mo * init(int  n)  //初始化循环链表
{
mo *r;//尾部
mo *head = new mo;
r = head;
head->f = true;
head->num = 1;
head->next = NULL;
for (int i = 2; i <= n; i++)
{
mo *p = new mo;
p->num = i;
p->f = true;
p->next = NULL;
r->next = p;
r = r->next;
}
r->next =head;
return head;
}

void fun(mo *head, int n,int a,int b)
{
int cnt = 0;  //报数
mo *s = head;//移动位置
for (int i = 0; i < a-1; i++)  //移动到a位置
s = s->next;
while (n > 0)
{
if (n == 1&&s->f==true)
{
cout<<s->num<<endl;
break;
}
if (s->f)
{
cnt++;
}
if (cnt == b)//退出
{
s->f=false;
cout << s->num << ",";
n--;
cnt = 0;
}
s = s->next;
}

}

int main()
{
int n,a,b;
while(cin>>n>>a>>b)
{
if(n==0&&a==0&&b==0)break;
mo *p=init(n);
fun(p,n,a,b);
}
return 0;
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
一只很菜但是好学的猪 发布了38 篇原创文章 · 获赞 1 · 访问量 1581 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: