以前在一个笔试的时候考到过。。。
类似的问题。
http://wenku.baidu.com/view/179cb419a8114431b90dd896.html###
package com.huawei.job.endual.que1.main;
class YueSheFuQuestion {
private int[] arrPosition; // 每个人的位置
private int[] arrSecret; // 每个人对应的密码
private int SECRET = 0; // 密码
public YueSheFuQuestion(int[] arrPosition, int[] arrSecret, int SECRET) {
this.arrPosition = arrPosition;
this.arrSecret = arrSecret;
this.SECRET = SECRET;
}
public void printPeople() {
int mCount = this.arrPosition.length; // 人的总数
System.out.println("mCount = " + mCount);
int curPeopleCount = mCount; // 当前人的数量
int curCount = 1; // 当前数字的位置
int curSecret = this.SECRET; // 当前的位置
int curPosotion = 0; // 当前人的位置,从第一个人数
while (curPeopleCount != 0) {// 当前的数目只有一个人的时候,就停止
if (arrPosition[curPosotion] == -1) { // 这个人已经出局的
curPosotion = curPosotion + 1; // 当前人的位置加1
if (curPosotion == mCount) { // 如果当前人的位置数量大于了人的总是,那么就循环了
curPosotion = 0; // 从第一人开始了
}
//curCount = curCount + 1; // 当前报数添加一个
}
else { // 没有出局的
if (curCount == curSecret) { // 当前数数是否等于当前的密码
System.out.print("Position-->"
+ arrPosition[curPosotion] + "||"); // 打印出当前的位置
curSecret = arrSecret[curPosotion]; // 把密码赋值给当前的密码
arrPosition[curPosotion] = -1; // 当前的位置出局
curPeopleCount--; // 当前的数目要减去一个
curPosotion = curPosotion + 1; // 当前人的位置加1
if (curPosotion == mCount) { // 如果当前人的位置数量大于了人的总是,那么就循环了
curPosotion = 0; // 从第一人开始了
}
curCount = 1; // 从1开始了数了
} else { // 如果是不相等的
curPosotion = curPosotion + 1; // 当前人的位置加1
if (curPosotion == mCount) { // 如果当前人的位置数量大于了人的总是,那么就循环了
curPosotion = 0; // 从第一人开始了
}
curCount = curCount + 1; // 当前报数添加一个
} // end else2
} // end else1
} // end while
} // end printPeople
} // end class
package com.huawei.job.endual.que1.main;
public class MainRun {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int mCount = 7 ;
int[] arrPosition = new int[7] ;
int[] arrSecret = new int[7] ;
for (int i=0; i < mCount; i++) {
arrPosition[i] = i+1 ;
System.out.print(arrPosition[i] + "||");
}
System.out.println("----");
for (int i=0; i < mCount; i++) {
int random = (int)(Math.random()*100) ;
arrSecret[i] = random ;
System.out.print(arrSecret[i] + "||");
}
System.out.println("----");
int secret = (int)(Math.random()*1000) ;
System.out.println("secret=" + secret);
//arrPosition = [] ;
//int[] arrSecretx = {3,1,7,2,4,8,4} ;
//secret = 20 ;
YueSheFuQuestion yQue = new YueSheFuQuestion(arrPosition,arrSecret,secret) ;
yQue.printPeople() ;
}
}
效率很不高,但是应付笔试完全没有问题了
本文提供了一个解决笔试面试中出现的淘汰游戏问题的Java代码实现,详细解释了算法逻辑,包括初始化参与者位置和密码,以及如何进行淘汰游戏的过程。代码通过循环遍历每个参与者,检查其位置和密码,直至所有参与者被淘汰。
216

被折叠的 条评论
为什么被折叠?



