题目描述
输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;若身高差相同, 选平均身高高的那两个身高;从小到大输出; 如输入 170 181 173 186 190输出 170 173
方案不是很好,中途写的一半发现错了,临时补救的,可以直接跳过看第二种方式。
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ( (str= br.readLine())!=null){
String arr[] = str.split(" ");
int len = arr.length;
int[] num = new int[len];
int min = Integer.MAX_VALUE;
int mi = 0;
int mj = 0;
for (int i=0;i<len;i++){
num[i] = Integer.valueOf(arr[i]);
}
int[][] dp = new int[len][len];
for (int i=0;i<len;i++){
for (int j=0;j<len;j++){
if (i != j){
dp[i][j] = Math.abs(num[i]-num[j]);
if ( dp[i][j] < min){
min = dp[i][j];
mi= i;
mj = j;
}
}
}
}
for (int i=0;i<len;i++){
for (int j=0;j<len;j++){
if (i != j && dp[i][j] == min){
if ((num[i] + num[j]) > (num[mi] + num[mj])){
mi= i;
mj = j;
}
}
}
}
System.out.println(num[mi] + " " + num[mj]);
}
}
}
方式二
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while ( (str= br.readLine())!=null){
// 存放最小值
int min = Integer.MAX_VALUE;
// 存放平均值 两个身高之和即可
int avr = Integer.MIN_VALUE;
//第一个人的身高
//第二个人的身高
int pre=0;
int post=0;
String[] strr = str.split(" ");
int len = strr.length;
int[] arr = new int[len];
for (int i=0;i<len;i++){
arr[i] = Integer.valueOf(strr[i]);
}
for (int i=0;i<len;i++){
for (int j=0;j<len;j++){
if (i!=j){
if (Math.abs(arr[i]-arr[j]) < min){
min = Math.abs(arr[i]-arr[j]);
pre = arr[i];
post = arr[j];
avr = pre + post;
}else if (Math.abs(arr[i]-arr[j]) == min){
if (arr[i] + arr[j] > avr){
pre = arr[i];
post = arr[j];
avr = pre + post;
}
}
}
}
}
if (pre < post){
System.out.println(pre + " " + post);
}else {
System.out.println(post + " " + pre);
}
}
}
}
网友评论