google赛马--andy

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();//赛马过程

       }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值