约瑟夫问题(猴子选大王)

来源:互联网 发布:张孝祥java视频 编辑:程序博客网 时间:2024/05/16 23:59
#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,出为1int 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++;//出数组个数加1had_count = 0;//将数数置为0}}}//输出数组,即可看出最后谁在数组里面for(i=0; i<N; i++){cout<<state_array[i]<<" ";}cout<<endl;return 0;}


以前写过约瑟夫问题的代码,要用的时候又找不到了,今天自己又写了一个,做了注释,作为笔记

整体看需要两个数组,三个变量。

一个数组(name_array)存放猴子的编号,一个数组(state_array)记录出圈子的猴子和在在圈子里面的猴子。

三个变量有注释


0 0
原创粉丝点击