第一种:
package 找猴王; public class Test { public static void main(String[] args) { int n=15;//15只猴子 int m=7;//数到7的就出局 int count=1;//count为计报数的值,从1开始,7结束 int size=n;//size的值从15变到1,到1时就找到了猴王(每数到7的就出局所以会最终剩余1) int[] a = new int[n];//定义一个数组存放15个猴子的编号(1--15的编号) for(int i=0;i<n;++i) { a[i]=i+1;//第一只猴子编号1,第二只猴子编号2...第15只猴子编号15 //System.out.println(a[i]+",");打印出1--15个数 } int current=0; while(size!=1)//此while循环判断剩余猴子数,当剩余1只时结束,找到猴王 { while(count<m)//从1开始报数直到报到7时结束此while循环 { if(a[current]!=0) { count++; current=(current+1)%n;//循环成一个圈 while(a[current]==0) { current=(current+1)%n; } } else { current=(current+1)%n; while(a[current]==0) { current=(current+1)%n; } } } a[current]=0; while(a[current]==0) { current=(current+1)%n; } size--;//上面找到了数7的就使猴子数size减一 count=1;//count计数重新从1开始计数 } //System.out.println();//换行 for(int i=0;i<n;++i)//此for循环找出a[i]不等于0的猴子就是大王,因为a[i]是0表示淘汰了的 { if(a[i]!=0) { System.out.println("第"+(i+1)+"个是猴王!"); } } } }
第二种:
package 找猴王; public class Test2 { public static int getQue(int n,int m){ int r = 0; for(int i=2;i<=n;i++) r = (r+m)%i; return r+1; } public static void main(String[] args) { int key = Test2.getQue(15,7); System.out.println("猴王是:"+key); } }
时间: 2024-10-03 20:45:17