面试--约舍夫问题

以前在一个笔试的时候考到过。。。

类似的问题。

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() ;
		
		
	}


}
扫描二维码关注公众号,回复: 1320208 查看本文章

   效率很不高,但是应付笔试完全没有问题了

猜你喜欢

转载自endual.iteye.com/blog/1667154
今日推荐