1. 程式人生 > 實用技巧 >試題 演算法提高 數字分組

試題 演算法提高 數字分組

題目連結: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;
    		}
    	}
    }
}