一、问题描述
.......
二、问题分析
.......
三、程序1:基于简单数组
// Josephus.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int n, m;//n参与活动的人数,m计数值
cin >> n >> m;
cout << n << " " << m << endl;
int* a = new int[n];
for(int i=0; i<n; ++i)
a[i] = i+1;//设置编号
int s = n, k = -1, j = -1; //
while(s != 1) //一直传递,直到最后一个人为止
{
while(k != m)
{//寻找下一个出局者
do{
j = ++j % n;
}while(a[j] == 0);//找到下一个参与者
++k;
}
cout << a[j] << endl;
a[j] = 0;//出局者的编号清为0
k = -1;
s -= 1;
}
cout << "Winner: ";
do{
j = ++j % n;
}while(a[j] == 0); //最后一个为获胜者
cout << a[j] << endl;
delete[] a;
return 0;
}
四、程序2:基于循环链表
........