用C++实现只猴子选大王,选举办法如下:从头到尾 1,2,3报数,凡报3的退出,余下的从下一个开始循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C++实现只猴子选大王,选举办法如下:从头到尾 1,2,3报数,凡报3的退出,余下的从下一个开始循环相关的知识,希望对你有一定的参考价值。
n只猴子选大王,选举办法如下:从头到尾 1,2,3报数,凡报3的退出,余下的从下一个开始循环报数,1,2,3报数,凡报3的退出...如此类推,当剩下两只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?
#include "stdafx.h"#include <iostream.h>
class Monkey
public:
Monkey * left;
Monkey * right;
int id;
Monkey::Monkey(int _id)
id = _id;
;
class MonkeyRing
public:
int monketNumAll;
int monketNum;
int ringNumberOff;
Monkey * head;
void ExitThree(Monkey * nodeNum_1) //传入报数是1的猴子
if (monketNum<3)
cout<<nodeNum_1->id<<"号猴子是猴王"<<endl;
else
Monkey * exitNodeNext = nodeNum_1->right->right;
RingDel(exitNodeNext);
monketNum--;
ExitThree(exitNodeNext->right);
Monkey * MonkeyRing::RingAdd(Monkey * left,Monkey * right,int _id) //往圈里面加猴子
Monkey * node = new Monkey(_id);
node->left = left;
node->right = right;
if (left!=NULL)
left->right = node;
if (right!=NULL)
right->left = node;
return node;
void MonkeyRing::RingDel(Monkey * node) //猴子从圈脸面退出
node->left->right = node->right;
node->right->left = node->left;
cout<<node->id<<"号猴子退出"<<endl;
MonkeyRing::MonkeyRing(int _monketNumAll)
monketNumAll = _monketNumAll;
monketNum = _monketNumAll;
ringNumberOff = 1;
head = RingAdd(NULL,NULL,1);
Monkey * left = head;
for (int i=2;i<=monketNumAll;i++)
left = RingAdd(left,NULL,i);//右手为空时因为这时还不知道下一个是谁
//让第一个猴子和最后一个猴子牵手
head->left = left;
left->right = head;
;
int main(int argc, char* argv[])
MonkeyRing * ring = new MonkeyRing(200);
ring->ExitThree(ring->head);
return 0;
参考技术A 约瑟夫环问题,上网先找资料自己试着写写看
7-28 猴子选大王(20 分)
7-28
7-28 猴子选大王(20 分)
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入格式:
输入在一行中给一个正整数N(≤1000)。
输出格式:
在一行中输出当选猴王的编号。
输入样例:
11
输出样例:
7
AC代码
#include<stdio.h>
int main(){//用对列应该好做,那么现在不会队列,怎么办呢?
int hou[1000];
int num;
scanf("%d",&num);
for(int i=1;i<=num;i++){
hou[i]=1;
}
int baoshu=0;
int chuju=0;
int i=1;
while(i){
if(hou[i]==1)
baoshu++;
if(baoshu==3){
hou[i]=0;
baoshu=0;
chuju++;
if(chuju==num){
printf("%d",i);
break;
}
}
i++;
if(i==num+1)
i=1;
}
return 0;
}
以上是关于用C++实现只猴子选大王,选举办法如下:从头到尾 1,2,3报数,凡报3的退出,余下的从下一个开始循环的主要内容,如果未能解决你的问题,请参考以下文章