约瑟夫是公元1世纪一位著名的历史学家。
约瑟夫问题可简述为:
有n人围坐成一圈(假设他们的编号沿顺时针方向依次为1到n)。编程序,使用数组来存放各数据(人员编号),而后从1号人员开始数起(沿顺时针方向),当数到k时(其中k>1由用户通过cin输入指定),则该号人员被“淘汰出局”;接着仍沿顺时针方向从被淘汰出局者的下一人员又重新从1开始数起,数到k后,淘汰第2个人;如此继续,直到最后剩下一个人时停止。请输出先后被“淘汰”的人的编号。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
unsigned int uiMenCount;//圈中总人数
unsigned int uiK;//指定的K值
unsigned int uiNextQuitIndex=0;//下一次要出列的人的索引
int *pIntArr=NULL;
while(true)
{
cout << "Enter the number of people: ";
cin >> uiMenCount;
pIntArr=new int[uiMenCount];
for(unsigned i=0;i<uiMenCount;i++)
{
pIntArr[i]=0;
}
cout << "Enter the number Who will breaks the ranks: ";
cin >> uiK;
/*uiMenCount个人,全部出列后只剩下一个人,所以只需uiMenCount-1次循环*/