#include
#include
using namespace std;
/备注:list里面的end是一个空地址,里面不存放任何元素,仅用来指示队尾/
int joselus(int n,int m,int s=1)
{
if (n < 1 || m < 1)
return -1;
list numbers;
for (int i = 0;i < n;i++)
numbers.push_back(i+1);
list<int>::iterator current = numbers.begin();
if(s!=1)
{
for (int i = 0;i <s-1;i++)
current++;
}
for (int i = 0;i < n - 1;i++)
{
for (int j = 0;j < m-1;j++)
{
current++;
if (current == numbers.end())
current = numbers.begin();
}
cout << *(current) << " ";
list<int>::iterator next = ++current;
if (next == numbers.end())
next = numbers.begin();
current--;
numbers.erase(current);
current = next;
}
cout << "最后输出的:" << *(current) << endl;
return 0;
}
int main()
{
int n, m, s;
cout << “请输入两个数”;
cin >> n >> m>>s;
joselus(n,m,s);
return 0;
}
如上为约瑟夫环的问题的解决方法