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

📄 用顺序表实现约瑟夫问题.cpp

📁 这个是我的大学作业哦 里面有些很经典的代码 出自清华大学的数据结构课本
💻 CPP
字号:

#include <iostream>
using namespace std;
//***********************
int n = 0 , s = 0 , m = 0;
int* ring;
bool getValue();
void process();
//*************************************************************
int main() {
	if(!getValue()) return 1;

	process();
	
	return 0;
}
//*************************************************************
bool getValue() {
	cout<<"please supply ringsize->n , startposition->s , interval->m and press enter;"<<endl;
	cin>>n>>s>>m;
	cout<<"---------------------------------"<<endl;
	cout<<n<<"    "<<s<<"    "<<m<<endl;
	cout<<"---------------------------------"<<endl;
	ring = new int[n];
	for (int i = 0; i < n ; i++)
	{
		ring[i] = 1; 
	}
	if( n < 2 || m > n || s > n || m < 1 || s < 0 )
	{
		cout<<"fail in initializing"<<endl;
		return false;
	}
	return true;
}
//--------------------------------------------------------------------
void process() {
	int  ss = 0 , k = s , j = 1;           // ss累计
	while (j < n)
	{		k++;
		ss = ss + ring[k % n];
		if(ss == m)
		{
			ss = 0;
			ring[k % n] = 0;
			cout<<"第"<<j<<"次出链的结点是: "<<k % n<<endl;
			
			j++;
		}
	}

	for(int x = 0; x < n; x++)
	{
		if(ring[x] != 0)
		{
			cout<<"最后的胜出的结点是 -> "<< x <<endl;
		}
	}
	
}








⌨️ 快捷键说明

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