google的一个面试题:
一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少得比多少场才能知道跑得最快的5匹马。
代码:
import java.util.Arrays;
import java.util.Random;
public class Get5Best {
static int max[] = new int[5]; // 中间结果及最后结果保存
static int a[][] = new int[5][5];// 25 匹马
// 赛马 结果按从小到大 保存在max中
static void sort(int x1, int x2, int x3, int x4, int x5) {
max[0] = x1;
max[1] = x2;
max[2] = x3;
max[3] = x4;
max[4] = x5;
for (int i = 0; i < 5; i++)
for (int j = i + 1; j < 5; j++)
if (max[j] < max[i]) {
max[i] = max[j] + max[i];
max[j] = max[i] - max[j];
max[i] = max[i] - max[j];
}
System.out.print("××伪最大5匹黑马**");
for (int i = 0; i < 5; i++)
System.out.print(max[i] + " ");
System.out.println("*********");
}
//具体的赛马过程
void showTheRace(){
Random r = new Random();
for (int i = 0; i < 5; i++)
// 随机赋值
for (int j = 0; j < 5; j++)
a[i][j] = r.nextInt(10000); // 越大重复的概率越低
System.out.println("/n--初始化值----");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
// 相当于跑5次 调用库的排序函数
for (int i = 0; i < 5; i++)
Arrays.sort(a[i]);
System.out.println("/n--跑5次后的结果----");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
for (int i = 0; i < 5; i++)
// 第六次
for (int j = i + 1; j < 5; j++)
if (a[j][4] > a[i][4]) {
a[i][4] = a[j][4] + a[i][4];
a[j][4] = a[i][4] - a[j][4];
a[i][4] = a[i][4] - a[j][4];
}
System.out.println("/n--第六次后的结果----");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(a[i][j] + " ");
}
System.out.println();
}
System.out.println("/n--剩下4次---");
sort(a[4][4], a[3][3], a[2][2], a[1][1], a[0][0]);
sort(a[3][4], a[2][3], a[1][2], a[0][1], max[4]);
sort(a[2][4], a[1][3], a[0][2], max[3], max[4]);
sort(a[1][4], a[0][3], max[2], max[3], max[4]);
max[0] = max[1];
max[1] = max[2];
max[2] = max[3];
max[3] = max[4];
max[4] = a[0][4];
System.out.print("---最大5匹黑马:----");
for (int i = 0; i < 5; i++)
System.out.print(max[i] + " "); // 最后结果
}
public static void main(String[] args) {
Get5Best g5 = new Get5Best();
g5.showTheRace();//赛马过程
}
}