試題 演算法提高 數字分組
阿新 • • 發佈:2020-08-16
題目連結:http://lx.lanqiao.cn/problem.page?gpid=T774###
問題描述:
輸入任意10個浮點數,根據它們的聚集程度劃分為3組,輸出每一組的平均值。
提供老師上課講的一種思路:將10個數字進行在數軸上排序,然後計算每兩個點間的距離,在所有的距離中選取兩個最大距離處斷開,這樣就把10個數字分為了3組。
輸入格式:
十個待輸入的浮點數,使用空格隔開
輸出格式:
三組數的平均數,每輸出一個需要換行
題解:
題目中需要去除java的小數後多餘的0,如10.1200輸出10.12
用NumberFormat(數字格式化類)
import java.text.NumberFormat NumberFormat nf = NumberFormat.getInstance(); nf.format(double);
程式碼:
import java.text.NumberFormat; import java.util.Arrays; import java.util.Scanner; public class Main { static int max = 11; static double num[] = new double[max]; public static void main(String[] args) { Scanner cin = new Scanner(System.in); for(int i=0;i<10;i++) num[i] = cin.nextDouble(); Arrays.sort(num,0,10); int tag1=0,tag2=0; double len1=0.0,len2=0.0; for(int i=0;i<9;i++) { double x = num[i+1]-num[i]; if(x>len1) { len2 = len1; tag2 = tag1; len1 = x; tag1 = i; } else if(x>len2) { tag2 = i; len2 = x; } } double sum = 0.0; int cnt = 0; NumberFormat nf = NumberFormat.getInstance(); for(int i=0;i<10;i++) { sum += num[i]; cnt++; if(i==tag1 ||i==tag2 || i==9) { System.out.println(nf.format(sum/cnt)); sum = 0.0; cnt = 0; } } } }