📄 用顺序表实现约瑟夫问题.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 + -