码迷,mamicode.com
首页 > 其他好文 > 详细

金块问题

时间:2014-06-27 10:10:12      阅读:708      评论:0      收藏:0      [点我收藏+]

标签:金块问题   java   算法   

金块问题

题目:老板有一袋金块(共 n 块,n 是 2 的幂( n ≥ 2 )),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。并对自己的程序进行复杂性分析。

import java.util.Scanner;

public class Main {

	private static void minmax(int i, int j, int[] gold, int[] result) {

		int[] ltemp = new int[2];
		int[] rtemp = new int[2];

		if (i == j - 1) {
			if (gold[i] <= gold[j]) {
				result[0] = gold[i];
				result[1] = gold[j];
			} else {
				result[0] = gold[j];
				result[1] = gold[i];
			}
		} else {
			int mid = (i + j) / 2;
			minmax(i, mid, gold, ltemp);
			minmax(mid + 1, j, gold, rtemp);

			if (ltemp[0] <= rtemp[0]) {
				result[0] = ltemp[0];
			} else {
				result[0] = rtemp[0];
			}

			if (ltemp[1] >= rtemp[1]) {
				result[1] = ltemp[1];
			} else {
				result[1] = rtemp[1];
			}

		}

	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			int n = scanner.nextInt();

			int[] gold = new int[n];
			for (int i = 0; i < n; i++) {
				gold[i] = scanner.nextInt();
			}

			int[] result = new int[2];
			minmax(0, n - 1, gold, result);

			System.out.println("min: " + result[0]);
			System.out.println("max: " + result[1]);
		}
		scanner.close();
	}
}

金块问题,布布扣,bubuko.com

金块问题

标签:金块问题   java   算法   

原文地址:http://blog.csdn.net/u011506951/article/details/34934621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!