试题 算法提高 数字分组

题目链接: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;
    		}
    	}
    }
}

 

posted @ 2020-08-16 10:23  吐司奶猫荷包蛋  阅读(242)  评论(0)    收藏  举报