#include <iostream>
#define N 7//成员数目
#define NEED_COUNT 3//出数组条件
#define NEED_STAY 1//需要留下的个数
using namespace std;
int main()
{
int index = 0;//索引,指向当前
int had_count = 0;//出数组条件
int had_out = 0;//已经出数组的个数
int name_array[N];//编号数组
int state_array[N];//出数组状态数组,在为0,出为1
int i;
//初始化
for(i=0; i<N; i++)
{
name_array[i] = i+1;
state_array[i] = 0;
}
//开始执行,条件是看最后一个编号是多少
while(had_out < N - NEED_STAY)
{
for(index = 0; index < N && had_out < N - NEED_STAY; index++)
{
if(state_array[index])//是1跳过
continue;
if(++had_count == NEED_COUNT)
{
state_array[index] = 1;//标记已经出数组了
had_out++;//出数组个数加1
had_count = 0;//将数数置为0
}
}
}
//输出数组,即可看出最后谁在数组里面
for(i=0; i<N; i++)
{
cout<<state_array[i]<<" ";
}
cout<<endl;
return 0;
}
以前写过约瑟夫问题的代码,要用的时候又找不到了,今天自己又写了一个,做了注释,作为笔记
整体看需要两个数组,三个变量。
一个数组(name_array)存放猴子的编号,一个数组(state_array)记录出圈子的猴子和在在圈子里面的猴子。
三个变量有注释