#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)记录出圈子的猴子和在在圈子里面的猴子。

三个变量有注释