⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 josephus.cpp

📁 数据结构的一些教程....比较适于初学者
💻 CPP
字号:
#include "CirList.h"
template<class T>
void Josephus(CirList<T> &CList, int n, int m)
{
	ListNode<T> *p;

	cout<<"删除次序依次为:"<<endl;
	CList.Reset(-1);     //使当前结点为头结点

   	for(int i=0; i<n-1; i++)
	{
		for(int j=0; j<m-1; j++) //寻找第m个人
		{
			p=CList.Next();
			if(CList.EndOfList()) p=CList.Next(); //越过头结点
		}
		if(CList.NextEndOfList()) p=CList.Next(); //排除头结点
		cout<<"删除第"<<CList.DeleteAfter()<<"人"<<endl; //删除之
	}
	cout<<"最后剩下的是:第"<<CList.GetData(0)<<"个人"<<endl;
	return;
}

void main(void)
{
	CirList<int> myCirList;  //建立一个空单循环链表
	
	int n,m;

	cout<<"输入总人数 n:";
	cin>>n;
	cout<<"输入计数间隔 m:";
	cin>>m;

	for(int i=0; i<n; i++) myCirList.Insert(i+1,i);//插入n个元素

	cout<<"人员编号次序为:";
	myCirList.Reset();//当前指针指向第一个元素
	while(!myCirList.EndOfList())  //当未到表尾时,反复做
	{
		cout<<myCirList.GetData()<<" ";    //输出p所指的元素
		myCirList.Next();         //当前指针下移。
	}
	cout<<endl;
	cout<<"游戏开始:循环数数,每数到m则出队这人(删除)"<<endl;
	Josephus(myCirList,n,m);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -