Josephus问题的C 新解法

文章作者 100test 发表时间 2007:03:10 16:54:43
来源 100Test.Com百考试题网


Josephus.h
class Josephus
{
public:
void OutControl(int num,int begin,int interval).
protected:
int num.
int begin.
int interval.
}.

List.h
struct People
{
int number.
People *next.
}.


class List
{
public:
List (int num)//初始化point->number
{
josephus = new People[num].
point = josephus.
for(int i=1.i<=num.i )
{
point->number = i .
point->next = josephus i % num. /*利用 1取模的方式设置节点的next指针,
当到最后的时候自动指向到第一个,形成环链 */
point = point->next.
}
point = &.josephus[num-1]. //把起始指针设置在最后一个节点,当进入循环的时候就会从0开始,
}

~List()
{
0delete[] josephus. //返回堆内存空间
}

void Change (int num, int begin).
void Count(int interval).
void Output().
void Show().

protected:
People *josephus.
People *point.
People *cut_point.
}.


Josephus.cpp
#include
#include "Josephus.h"
#include "List.h"
using namespace std.

void Josephus::OutControl(int num,int begin,int interval) //调用List的成员函数,依次输出出列的号码
{
List in(num).
in.Change (num, begin).

cout<<"依次出列次序为:".
for(int i=1.i<=num.i )
{
in.Count(interval).
in.Show().
in.Output().
}
cout<}

List.cpp
#include
#include "List.h"
using namespace std.


void List::Change (int num, int begin) //设置起始指针的位置
{
if (begin==1)
point=&.josephus[num-1].
if (begin>=2)
point=&.josephus[begin-2].
}

void List::Count(int interval) //通过循环不断的寻找需要放弃的节点
{
for(int i=0.i{
cut_point = point.
point = cut_point->next.
}
}

void List::Show() //打印号码
{
cout<number<<".".
}

void List::Output() //使不需要的节点脱离
{
cut_point->next = point->next.
point=cut_point.
}


main.cpp
#include
#include "Josephus.h"
using namespace std.

void main()
{ int num,begin,interval.

cout<<"请输入总人数:".
cin>>num.
if(num<2)
{
cout<<"错误!总人数不能小于2!".
return.
}

cout<<"请输入开始号码:".
cin>>begin.
if(begin<1||begin>num)
{
cout<<"错误!开始号码不能小于1或大于总人数!".
return.
}

cout<<"请输入间隔:".
cin>>interval.
if(interval<1||interval>num)
{
cout<<"错误!间隔不能小于1或大于总人数!".
return.
}

Josephus in.
in.OutControl(num,begin,interval).
cin.get ().
cin.get ().
}

相关文章


高校等考试题天天练文化基础]10月25日
高校等考试题天天练文化基础]10月26日
二级C语言程序第7章函数2
二级C语言程序第8章指针
Josephus问题的C 新解法
C 程序设计例解(01)
高校等考试题天天练文化基础]10月23日
高校等考试题天天练文化基础]10月22日
二级C语言程序第7章函数1
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛