试题 算法提高 数字分组
题目链接: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;
}
}
}
}

浙公网安备 33010602011771号