JAVA实现算法问题25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛
- 随机数模拟25匹马匹速度
import java.lang.reflect.Array; import java.util.Arrays; public class Ma { public static void main(String[] args) { double[] a1[] = new double[5][5]; double[] a2[] = new double[5][3]; double[] a3[] = new double[5][3]; System.out.println("-----------------------------------------------------------------------"); System.out.println("-----------------------------------------------------------------------"); System.out.println("25匹随机马的速度"); for (int i = 0; i < a1.length; i++) { for (int i1 = 0; i1 < a1[i].length; i1++) { a1[i][i1] = Math.random() * 100; System.out.print(a1[i][i1] + "\t\t"); } System.out.println(); } for (int i = 0; i < a1.length; i++) { Arrays.sort(a1[i]); } double m; for (int i = 0; i < a2.length; i++) { for (int i1 = 0; i1 < a2[i].length; i1++) { m = a1[i][a1[i].length - 1 - i1]; a2[i][i1] = m; } } System.out.println("-----------------------------------------------------------------------"); System.out.println("-----------------------------------------------------------------------"); System.out.println("五次比赛后25匹随机马的速度排列"); for (int i = 0; i < a1.length; i++) { for (int i1 = 0; i1 < a1[i].length; i1++) { System.out.print(a1[i][i1] + "\t\t"); } System.out.println(); } System.out.println("-----------------------------------------------------------------------"); System.out.println("-----------------------------------------------------------------------"); System.out.println("取五次比赛后25匹随机马的速度排列的前三名"); for (int i = 0; i < a2.length; i++) { for (int i1 = 0; i1 < a2[i].length; i1++) { System.out.print(a2[i][i1] + "\t\t"); } System.out.println(); } int[] z = new int[5]; ;// 存放排序后数组元素原来所在数组的下标 double[] b = new double[5];// 存放需要排序列的数组 double[] d = new double[5];// 存放b[]升序后的数组 for (int i = 0; i < 5; i++) { b[i] = a2[i][0]; } for (int i = 0; i < b.length; i++) { d[i] = b[i]; } Arrays.sort(d);// 升序排列 for (int i = 0; i < d.length; i++) { for (int j = 0; j < d.length; j++) { if (d[i] == b[j]) { z[i] = j; b[j] = -999999; break; } else { continue; } } } System.out.println("-----------------------------------------------------------------------"); System.out.println("-----------------------------------------------------------------------"); System.out.println("第六次比赛:25匹随机马的速度排列的前三名中的第一名比赛结果排列(组内成员不变)"); for (int i = 0; i < a3.length; i++) { for (int j = 0; j < a3[i].length; j++) { a3[i][j] = a2[z[i]][j]; System.out.print(a3[i][j] + "\t\t"); } System.out.println(); } System.out.println("-----------------------------------------------------------------------"); System.out.println("-----------------------------------------------------------------------"); System.out.println("除去第一名 其他存在争议的马屁比赛结果"); double[] mm = {a3[4][1], a3[4][2], a3[3][0], a3[3][1], a3[2][0]}; Arrays.sort(mm); for (int i = 0; i < mm.length; i++) { System.out.print(mm[i] + "\t\t"); } System.out.println("-----------------------------------------------------------------------"); System.out.println("-----------------------------------------------------------------------"); System.out.println("最快的三匹马为" + a3[4][0] + "\t\t" + mm[4] + "\t\t" + mm[3]); } }
运行结果
运行结果: ----------------------------------------------------------------------- ----------------------------------------------------------------------- 25匹随机马的速度 41.16856306827879 40.58252617025392 67.05712863342502 67.8539567988117 70.7560619248799 53.12588289824111 63.123216402371085 72.26841725311502 37.32135739637138 72.1084431363291 57.54303277063529 16.54300171646218 56.4301716349477 63.46113627279707 71.48397944175716 60.212504664887504 92.90588298272931 62.203994871534675 81.99279982567069 88.09580968326219 11.464967736874554 84.69711834411846 89.52981943859018 57.78249880211842 47.24087381972949 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 五次比赛后25匹随机马的速度排列 40.58252617025392 41.16856306827879 67.05712863342502 67.8539567988117 70.7560619248799 37.32135739637138 53.12588289824111 63.123216402371085 72.1084431363291 72.26841725311502 16.54300171646218 56.4301716349477 57.54303277063529 63.46113627279707 71.48397944175716 60.212504664887504 62.203994871534675 81.99279982567069 88.09580968326219 92.90588298272931 11.464967736874554 47.24087381972949 57.78249880211842 84.69711834411846 89.52981943859018 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 取五次比赛后25匹随机马的速度排列的前三名 70.7560619248799 67.8539567988117 67.05712863342502 72.26841725311502 72.1084431363291 63.123216402371085 71.48397944175716 63.46113627279707 57.54303277063529 92.90588298272931 88.09580968326219 81.99279982567069 89.52981943859018 84.69711834411846 57.78249880211842 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 第六次比赛:25匹随机马的速度排列的前三名中的第一名比赛结果排列(组内成员不变) 70.7560619248799 67.8539567988117 67.05712863342502 71.48397944175716 63.46113627279707 57.54303277063529 72.26841725311502 72.1084431363291 63.123216402371085 89.52981943859018 84.69711834411846 57.78249880211842 92.90588298272931 88.09580968326219 81.99279982567069 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 除去第一名 其他存在争议的马屁比赛结果 72.26841725311502 81.99279982567069 84.69711834411846 88.09580968326219 89.52981943859018 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 最快的三匹马为92.90588298272931 89.52981943859018 88.09580968326219 进程已结束,退出代码0
- 1-5 场:
- 将25匹马分为5组,每组5匹,得到下面的排序,每组最快的马在左侧,即X1、X6、X11、X16、X21分别是每组中最快的。
组1:X1 X2 X3 X4 X5 组2:X6 X7 X8 X9 X10 组3:X11 X12 X13 X14 X15 组4:X16 X17 X18 X19 X20 组5:X21 X22 X23 X24 X25
- 但是,现在还不能说最快的3匹马在X1、X6、X11、X16、X21中,因为有可能最快的3匹马全部分在第一组中,即有可能出现X2比X6快
- 但是我们肯定可以知道,每组的最后2名肯定不会是最快的3匹马,那么排除X4、X5;X9、X10;X14、X15;X19、X20;X24、X25;
- 第6场:
X1 X2 X3 X6 X7 X8 X11 X12 X13 X16 X17 X18 X21 X22 X23
-
参赛的为每组的第1名:X1、X6、X11、X16、X21,假设速度排序为X1、X6、X11、X16、X21。
-
那么我们可以知道,X16、X21及其后面的X17、X18;X22、X23均不可能是最快的3匹马。
-
第7场:
X1 X2 X3 X6 X7 X8 X11 X12 X13
- 目前,我们可以知道,X1是25匹马中最快的,但是X2、X6、X3、X7、X11之间的速度还不确定,需要再一次比赛,而X8、X12、X13不可能是最快的前3名。
- 参赛的为:X2、X6、X3、X7、X11,速度最快的2匹加上X1构成最快的3匹马。