「java猴子选大王」java猴子选大王从编号为k的猴子开始数组

博主:adminadmin 2022-11-26 00:21:09 75

今天给各位分享java猴子选大王的知识,其中也会对java猴子选大王从编号为k的猴子开始数组进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

猴子选大王用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猴子选大王的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。