目录
问题介绍:
讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后kill所有人。
于是约瑟夫建议:每次由其他两人一起kill一个人,而被kill的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在kill了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。
题目一:选猴王
有n只猴围成一圈,从1开始报数,数到m的就离开。直到最后一只猴,这只猴就是猴王
如n=5 m=3 最后得到4。
先贴代码:
#include <iostream>
#include <list> //写明头文件
using namespace std;
int main()
{
int n,m;
cin>>n>>m; //由终端输入:总数n 查到第m个删除
list<int> monkeys; //创建一个list列表
for(int i=1;i<=n;i++) //用for循环将数值写入list列表
{
monkeys.push_back(i);
}
list<int>::iterator it=monkeys.begin();
//当个数=1的时候停止 所以>1的时候循环
while(monkeys.size()>1){
for(int i=1;i<m;i++){
it++;