2、编写一个求解Josephus问题的函数。用整数序列, 2, 3, ……, n表示顺序围坐在圆桌周围的人。然后使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作为输入数据,检查你的程序的正确性和健壮性。最后分析所完成算法的时间复杂度。定义JosephusCircle类,其中含完成初始化、报数出圈成员函数、输出显示等方法。(可以选做其中之一)
加强题:
1、采用数组作为求解过程中使用的数据结构。
提高题:
2、采用循环链表作为求解过程中使用的数据结构。运行时允许指定任意n、s、m数值,直至输入 n = 0 退出程序。
程序代码:
#include"stdafx.h"
#include<iostream>
usingnamespacestd;
structNode
{
Node* next;
intiData;
};
// 这个简单的类中应该包括三个数据元素;
// 1.总共的人数n;.从第几个人开始s;.数到几m出列
classJosephouCircle
{
public:
voidSetValue();
voidPickOut();
voidShow(Node*);
private:
intiTotal; // 总共的人数;
intiNum; // 总共数几个数字;
intiFirst;
};
// 设置初值的大小;
voidJosephouCircle::SetValue()
{
cout << "请输入参与的人数,从第几个人开始,以及数到多少停止:" << endl;
cin >> iTotal;
cin >> iNum;
cin >> iFirst;
}