要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。
Smple input:161 189 167 172 188
Sample outPut: 188 189
分析:
看到这个题,最小想到的全排问题,从5个人中抽2个人出来,一共有10中情况。计算出来后,马上想到的是用排序来这10种情况的差值,选取差值最小那一组的俩个人。
接下来想到的是用什么数据结构。每一种情况需要存储a、b两个人的编号、俩个人的差值。很显然,数组是搞不定的啦。
我的思路是这个样子滴,自定义一个类Model,里面装了a、b两个得编号,和他们的差值。让他们实现了comparable接口。接下来,我用了TreeSet结构,将Model插进去,让TreeSet帮我们排序。这里有个小技巧,实现comparable接口时,故意将大小的次序跌倒,这样TreeSet中的对象,差值最小的在最前面。
代码:
public class JinZhi { static class Model implements Comparable<Model> { int a; int b; int min;//a、b两个人的身高差值 public Model(int a, int b, int min) { this.a=a; this.b=b; this.min=min; } @Override public int compareTo(Model o) { // TODO Auto-generated method stub if (this.min<o.min) { return -1; } else { return 1; } } @Override public String toString() { // TODO Auto-generated method stub return a+" "+b+" "+min; } } public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int[] a=new int[5]; int i=0; while(i<5&&scanner.hasNextInt()) { a[i++]=scanner.nextInt(); } TreeSet<Model> treeSet=new TreeSet<>(); for (int j = 0; j < a.length; j++) { for (int k = j+1; k < a.length; k++) { treeSet.add(new Model(j, k, Math.abs(a[j]-a[k]))); } } Iterator<Model> iterator=treeSet.iterator(); int max_1=0; int max_2=0; int min=0; while(iterator.hasNext()) { Model tempModel=iterator.next(); if (min==0) { if (a[tempModel.a]>max_1) { max_2=max_1; max_1=a[tempModel.a]; } else if (a[tempModel.a]<max_1&&a[tempModel.a]>max_2){ max_2=a[tempModel.a]; } if (a[tempModel.b]>max_1) { max_2=max_1; max_1=a[tempModel.b]; } else if (a[tempModel.b]<max_1&&a[tempModel.b]>max_2){ max_2=a[tempModel.b]; } min=tempModel.min; } else if(tempModel.min==min) { if (a[tempModel.a]>max_1) { max_2=max_1; max_1=a[tempModel.a]; } else if (a[tempModel.a]<max_1&&a[tempModel.a]>max_2){ max_2=a[tempModel.a]; } if (a[tempModel.b]>max_1) { max_2=max_1; max_1=a[tempModel.b]; } else if (a[tempModel.b]<max_1&&a[tempModel.b]>max_2){ max_2=a[tempModel.b]; } } else break; } System.out.println(max_2+" "+max_1); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-09-29 13:02:07