Josephus问题的C++新解法
Josephus.h
class约瑟夫斯
{
public:
void out control(int num,int begin,int interval);
protected:
int num;
int begin;
int interval;
};
list . h
struct person
{
int number;
人*下一个;
};
class list
{
public:
list(int num)//initialize point-> number
{
josephus = new people[num];
point = Joseph us;
for(int I = 1;I {
point-> number = I;
point-> next = Joseph us+I % num;/*以+1为模设置节点的下一个指针,
到了末尾会自动指向第一个,形成一个环链*/
point = point-> next;
}
point = & Joseph us[num-1];//设置开始指针指向最后一个节点,进入循环时从0开始。
}
~ List()
{
delete[]josephus;//返回堆内存空
}
void Change (int num,int begin);
void计数(int interval);
void Output();
void Show();
受保护的:
人*约瑟夫斯;
人*点;
人*切_点;
};
Joseph us . CPP
# include
# include " Joseph us . h "
# include " list . h "
使用命名空间std
void josephus::out control(int num,int begin,int interval)//调用List的成员函数,依次输出(num)中列出的数字
{
List;
在。Change (num,begin);
coutnext
}
}
Void List::Show() //打印编号
{
cout next;
point = cut _ point;
}
main . CPP
# include
# include " Joseph us . h "
使用命名空间std
void main()
{ int num,begin,interval
cout > num
if(num {
cout return;
}
cout>interval;
if(intervalnum)
{
cout
0条评论