#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)记录出圈子的猴子和在在圈子里面的猴子。
三个变量有注释