「java猴子选大王」java猴子选大王从编号为k的猴子开始数组
今天给各位分享java猴子选大王的知识,其中也会对java猴子选大王从编号为k的猴子开始数组进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、猴子选大王用javascript怎么写
- 2、java解决猴子选大王问题
- 3、猴子选大王C#题目,求指点,要求有注释
- 4、猴子选大王算法(快 得急)
- 5、会的都来吧 ,猴子选大王java实现
- 6、JAVA要求使用LinkedList集合帮我做一下猴子选大王的题目,谢谢了。
猴子选大王用javascript怎么写
#include "stdio.h"
#include "malloc.h"
int SelectKing(int n, int m) {
int i, current, count, *monkey, in = 1, out = 0;
monkey = (int*) malloc (sizeof(int) * (n + 1));
for(i = 1; i = n; i++) monkey[i] = in;
for(i = 1, current = 1; i n; i++) {
count = 0;
if(monkey[current] == in) count++;
while(count m){
current = current % n + 1;
if(monkey[current] == in) count++;
}
monkey[current] = out;
}
for(current = 1; current = n; current++)
if(monkey[current] == in) break;
return current;
}
void main( ){
int n, m king;
printf("请输入猴子的个数: ");
scanf("%d", n);
printf("请输入要报的数: ");
scanf("%d", m);
king = SelectKing(n, m);
printf("%d号猴子是大王\n", king);
}
java解决猴子选大王问题
import java.util.LinkedList;
import java.util.List;
public class Program {
/**
* @param args
*/
public static void main(String[] args) {
int N = 5;
ListMonkey monkeys = new LinkedListMonkey();
ListMonkey newMonkeys = new LinkedListMonkey();
//初始化猴子
for(int i = 0; i 17; i++){
monkeys.add(new Monkey(i));
}
newMonkeys.addAll(monkeys);
int index = 0;
while (true)
{
if (monkeys.get(index).numberOff() == N)//报数数到N
{
monkeys.remove(index);
Monkey.n = 1;
}
index++;
if (index = monkeys.size())
index = 0;
if (monkeys.size() == 1)//猴子只剩一个
break;
}
//查找当王的猴子原来的位置
for(int i = 0; i newMonkeys.size(); i++){
if(monkeys.get(0).getID() == newMonkeys.get(i).getID()){
System.out.println(i);
break;
}
}
}
}
class Monkey{
public static int n = 1;
private int id;
public Monkey(int id){
this.id = id;
}
public int getID(){
return id;
}
public int numberOff(){
int num = n;
n++;
return num;
}
}
猴子选大王C#题目,求指点,要求有注释
number就是题目中的m,返回值就是猴子的序号,代码中固定为6只猴子,呵呵,这个可以自己扩展
private IListint Monkeys;
private int ElectKing(int number)
{
Monkeys = new Listint(new int[] { 1, 2, 3, 4, 5, 6 });
int nIndex = 0;
int nNumber = 0;
while (Monkeys.Count 1)
{
//如果上一次报数的猴子是最后一只的话
if (nIndex Monkeys.Count - 1)
{
//从第一只开始
nIndex = 0;
}
//报数
nNumber++;
//移除数到某一个数的猴子
if (nNumber == number)
{
nNumber = 0;
Monkeys.RemoveAt(nIndex);
continue;
}
//下一个猴子准备
nIndex++;
}
return Monkeys[0];
}
猴子选大王算法(快 得急)
我用java写了一个,也是给人帮忙啦,可以给兄台参考参考,有空的话,给你改个指针版出来
MonkeyNumber.java源程序如下:
package test;
import java.util.Scanner;
/**
* @author Administrator
*
* 有M只猴子围成一圈,每只各一个从1到M中的编号,
* 打算从中选出一个大王;经过协商,决定出选大王的规则:从第一个开始循环报数,
* 数到N的猴子出圈,最后剩下来的就是大王。
* 要求:从键盘输入M、N,编程输出猴子出列的次序并计算哪一个编号的猴子成为大王(用数组实现)。
* 要求程序完整,并且验证过,
*
*/
public class MonkeyNumber {
/**
* 出圈
* b方法描述/b:第outNo号出圈 p
* b方法流程/b:
* p
* @param monkey
* @param n
* @return outNo 出圈的索引号
*/
private static int getOut(int[] monkey,int n){
int outNo = -1;
int intValidVoters = getVotersNumber(monkey);
for(int i=0; imonkey.length; i++){
if(intValidVoters n){
if(monkey[i]==n%intValidVoters){
outNo = i+1;
monkey[i]=-1;// 去除该位置的值
System.out.print("--编号为["+outNo+"]的猴子出圈!--");
return outNo;
}
}
else if(intValidVoters n){
if(monkey[i]==(n%intValidVoters==0?intValidVoters:n%intValidVoters)){
outNo = i+1;
monkey[i]=-1;// 去除该位置的值
System.out.print("--编号为["+outNo+"]的猴子出圈!--");
return outNo;
}
}
else if(intValidVoters==n){
if(monkey[i]==n){
outNo = i+1;
monkey[i]=-1;// 去除该位置的值
System.out.print("--编号为["+outNo+"]的猴子出圈!--");
return outNo;
}
}
}
return outNo;
}
/**
* 重新初始化数组
* b方法描述/b:对输入的数组重新进行赋初值 p
* b方法流程/b:
* p
* @param monkey
* @param startPos 从startPos位置开始赋初值,startPos索引的数组,其值置为1
*/
private static void reAssign(int[] monkey, int startPos){
int count = 0;
//数组中大于等于位置startPos的有效值的个数
int behindCount = getVotersNumber(monkey, startPos);
//对号码重新初始化
for(int i=0;imonkey.length; i++){
int differenceValue = i-startPos+1;
if(monkey[i] != -1){
if(differenceValue 0){
monkey[i]= ++behindCount;
}
else if(differenceValue = 0){
monkey[i]= ++count;
}
}
}
}
/**
* b方法描述/b:取得当前有效选民数 p
* b方法流程/b:
* p
* @param monkey
* @return
*/
private static int getVotersNumber(int[] monkey){
int count = 0;
//计算目前多少个号码有效
for(int i=0;imonkey.length; i++){
if(monkey[i] != -1){
count++;
}
}
System.out.print("当前有["+count+"]只猴子参加选举!");
return count;
}
/**
* b方法描述/b:取得大于等于位置startPos的有效选民数 p
* b方法流程/b:
* p
* @param monkey
* @return
*/
private static int getVotersNumber(int[] monkey,int startPos){
int count = 0;
//计算目前多少个号码有效
for(int i=startPos;imonkey.length; i++){
if(monkey[i] != -1){
count++;
}
}
return count;
}
/**
* b方法描述/b:主程序 p
* b方法流程/b:测试
* p
* @param args
*/
public static void main(String[] args){
System.out.println("Input:M N ");
Scanner scanner = new Scanner(System.in);
String strM = scanner.next();
String strN = scanner.next();
while (strM == null || !strM.matches("[0-9]+")){
System.out.println("输入错误,您输入的第一个参数不是数字,请再次输入:");
scanner = new Scanner(System.in);
strM = scanner.next();
}
while (strN == null || !strN.matches("[0-9]+")){
System.out.println("输入错误,您输入的第二个参数不是数字,请再次输入:");
scanner = new Scanner(System.in);
strN = scanner.next();
}
int m = Integer.parseInt(strM);
int n = Integer.parseInt(strN);
System.out.println("当前有::["+m+"]只猴子"+",即将报的数是::["+n+"]");
int monkey[] = new int[m];
//赋初值
for(int i=0; im; i++){
monkey[i]=i+1;
}
for(int i=0; im-1; i++){
//出圈
int outNum = getOut(monkey,n);
int startPos = -1;
if(outNum==m){
startPos = 0;
}
else{
startPos = outNum;
}
//再次循环赋初值
reAssign(monkey,startPos);
System.out.println();
}
for(int i=0; im; i++){
if(monkey[i]!=-1){
System.out.println("Voting Success!!!编号为["+(i+1)+"]的猴子成为大王!");
}
}
}
}
会的都来吧 ,猴子选大王java实现
只用数组的话,要多用一个数组倒腾数据,算法如下,调试通过:
public class MonkeyKing
{
public static void main(String[] args)
{
final int m=5;
int[] monkey;
//这个数组用来安置第一轮报数过后过关的猴子
int[] mon=new int[m];
//猴子围成圈报数,每轮报数过后,报数的基准会发生变化,这个变量用来存放基准偏移量
int token=0;
//满足条件的猴王候选人数
int candidate=m;
monkey=new int[candidate];
//为最初参选的猴子编号
for(int i=0;icandidate;i++)
{monkey[i]=i+1;}
//没有选出猴王之前,进行的操作
while(candidate1)
{
for(int i=0;icandidate;i++)
{
//报数为3的猴子编号一律为0
if((i+token)%3==2){monkey[i]=0;}
//报数结束一轮后,计算下一轮报数基准的偏移量
if(i==candidate-1)
{
//存放一轮结束后产生的基准编译
int k=0;
switch((candidate)%3)
{
case 0:k=0;break;
case 1:k=1;break;
case 2:k=2;break;
}
token +=k;
}
}
//存放每轮被淘汰的猴子的数量
int count=0;
//过关猴子数组的初始索引
int m_index=0;
for(int i=0;icandidate;i++)
{
if(monkey[i]!=0)
{
mon[m_index]=monkey[i];
m_index++;
}
else
{
count++;
}
}
//每轮过关的猴王候选
candidate -= count;
//重建猴王候选数组,进入下一轮报数
monkey= new int[candidate];
for(int i=0;icandidate;i++)
{
monkey[i]=mon[i];
}
}
System.out.println("猴王的编号为:"+monkey[0]);
}
}
JAVA要求使用LinkedList集合帮我做一下猴子选大王的题目,谢谢了。
import java.util.LinkedList;
public class MonkeyKing{
public static void main(String[] args) {
LinkedListInteger monkeys = new LinkedListInteger(){{
for (int i = 1; i = 100; i++)
add(i);
}
};
int count = 100;
int i = -1;
while (count 1){
int temp = i + 14;
if (temp = count)
temp = temp % count;
monkeys.remove(temp);
count--;
i = --temp;
}
System.out.println(monkeys.get(0));
}
}
java猴子选大王的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java猴子选大王从编号为k的猴子开始数组、java猴子选大王的信息别忘了在本站进行查找喔。
发布于:2022-11-26,除非注明,否则均为
原创文章,转载请注明出处。