约瑟夫(josephus)环是这样的:假设有n个小孩坐成一个环,假如从第一个小孩开始数,如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩?例如:总共有6个小孩,围成一圈,从第一个小孩开始,每次数2个小孩,则游戏情况如下:
小孩序号:1,2,3,4,5,6
离开小孩序号:2,4,6,3,1
最后获胜小孩序号:5
代码:
//
josephus.cpp : 定义控制台应用程序的入口点。
//
#include " stdafx.h "
#include " iostream "
using namespace std;
int _tmain( int argc, _TCHAR * argv[])
{
int peopleNumber;
cout << " 输入环中的人数: " ;
cin >> peopleNumber;
int * people = new int [peopleNumber];
int * people_flag = new int [peopleNumber];
cout << " 初始化...... " << endl;
for ( int i = 0 ; i < peopleNumber ; i ++ )
{
people[i] = i;
people_flag[i] = 0 ;
}
int interval;
cout << " 输入淘汰者要读的数字 " ;
cin >> interval;
int count = 0 ;
int people_least = peopleNumber;
do
{
for ( int i = 0 ; i < peopleNumber; i ++ )
{
if (people_flag[i] == 0 && count == interval)
{
cout << " 第 " << peopleNumber - people_least + 1 << " 轮序号是 " << people[i] << " 的人被踢出环 " << endl;
people_flag[i] = 1 ;
count = 0 ;
people_least -- ;
}
if (people_flag[i] == 0 && count != interval)
{
count ++ ;
}
}
} while (people_least != 1 );
for ( int i = 0 ; i < peopleNumber ; i ++ )
{
if (people_flag[i] == 0 )
cout << " 现在还剩序号是 " << people[i] << " 的人 " << endl;
}
getchar();
getchar();
return 0 ;
}
//
#include " stdafx.h "
#include " iostream "
using namespace std;
int _tmain( int argc, _TCHAR * argv[])
{
int peopleNumber;
cout << " 输入环中的人数: " ;
cin >> peopleNumber;
int * people = new int [peopleNumber];
int * people_flag = new int [peopleNumber];
cout << " 初始化...... " << endl;
for ( int i = 0 ; i < peopleNumber ; i ++ )
{
people[i] = i;
people_flag[i] = 0 ;
}
int interval;
cout << " 输入淘汰者要读的数字 " ;
cin >> interval;
int count = 0 ;
int people_least = peopleNumber;
do
{
for ( int i = 0 ; i < peopleNumber; i ++ )
{
if (people_flag[i] == 0 && count == interval)
{
cout << " 第 " << peopleNumber - people_least + 1 << " 轮序号是 " << people[i] << " 的人被踢出环 " << endl;
people_flag[i] = 1 ;
count = 0 ;
people_least -- ;
}
if (people_flag[i] == 0 && count != interval)
{
count ++ ;
}
}
} while (people_least != 1 );
for ( int i = 0 ; i < peopleNumber ; i ++ )
{
if (people_flag[i] == 0 )
cout << " 现在还剩序号是 " << people[i] << " 的人 " << endl;
}
getchar();
getchar();
return 0 ;
}