8 圆桌问题
1.问题描述
目的:使用C++模板设计循环链表的抽象数据类型(ADT)。并在此基础上,使用循环链表ADT的基本操作,设计并实现单链表的简单算法设计。
内容:(1)请使用模板设计循环链表的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考网盘中的单链表ADT原型文件,自行设计循环链表的ADT。)
(2)ADT的简单应用:使用该ADT设计并实现循环链表应用场合的一些简单算法设计。
圆桌上围坐着2n个人。其中n个人是好人,另外n个人是坏人。如果从第一个人开始数数,数到第m个人,则立即处死该人;然后从被处死的人之后开始数数,再将数到的第m个人处死……依此方法不断处死围坐在圆桌上的人。试问预先应如何安排这些好人与坏人的座位,能使得在处死n个人之后,圆桌上围坐的剩余的n个人全是好人。
2.输入说明
输入:好人和坏人的人数n(<=32767)、步长m(<=50);
3.输出说明
输出2n个大写字母,‘G’表示好人,‘B’表示坏人,50个字母为一行。
4.范例
输入说明
52 6
输出说明
BGGBGBGGBBBBGGGGBBBGBGGBGBBGGBBGBGBBGGGBBBGBGGBBGG
BBGBBGGGGBBBBGGBGGBBGBBGGBGBBGGBBBGGBGGBBGGGBBGBGG
GBGB
5.代码
#include<iostream>
using namespace std;
//约瑟夫问题(圆桌问题)-----使用循环链表
//定义结点
struct node
{
char num;
int isGood; //判断是否为好人,isGood==1为好人
struct node *next;
};
struct node *create(int n ,char num[])//创建带头结点的循环单链表
{
int i;
struct node *current;//当前插入位置指针
struct node *tail;//尾指针
struct node