题意:
1.对指数exponent相同的内容,把他们的coefficient进行相加.
2.按照输入格式输出内容,以指数从大到小来排序
3.系数最终值为0则抹去这一项
4.保留一位小数(不用四舍五入)
注意:
1.两个指数相同的最终只可以保留为个指数,如:
输入:2 2 2.4 1 4.3
2 2 2.6 1 4.7 0 3.4
输出: 3 2 5.0 1 9.0 0 3.4
2.系数为0则该项不用计入最终的内容数K
代码如下:
import java.util.Scanner;
import java.util.HashMap;
import java.util.Collection;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat(".0");//格式化输出
int MaxCount = 0;//记录最大值,方便之后的遍历
Scanner scanner = new Scanner(System.in);
String string1 = scanner.nextLine();
String string2 = scanner.nextLine();
//按空格分割字符串,并创建数组
String[] numbers1 = string1.split("\\s+");
String[] numbers2 = string2.split("\\s+");
//健是存exponents(指数)的,值是存coefficients(系数)的.
HashMap<Integer,Double> map= new HashMap<>();
for(int a = 1;a<numbers1.length;a+=2){//前是指数,后是系数.分别按key和value存入.
int key =Integer.parseInt(numbers1[a]);//String===>Integer
double value = Double.parseDouble(numbers1[a+1]);//String===>Double
if(map.containsKey(key)){//如果已经存在这个指数时,对系数进行相加
value = map.get(key)+value;
map.replace(key,value);//修改对应位置的值
}else{
map.put(key,value);//如果没有存在就添加
}
if(a==1) MaxCount = key;//依题意,N1>N2>N3>.......>Nk所以取第一个值即可知道它是这组内容最大的值
}
for(int a = 1;a<numbers2.length;a+=2){//与上同理
int key =Integer.parseInt(numbers2[a]);
double value = Double.parseDouble(numbers2[a+1]);
if(map.containsKey(key)){
value = map.get(key)+value;
map.replace(key,value);
}else{
map.put(key,value);
}
if(a==1){
MaxCount = key>MaxCount?key:MaxCount;//比较上下两个谁大,就取谁.
}
}
int count=map.size();//map总大小
Collection<Double> v = map.values();//遍历value用的
for(Double d :v){//如果出现系数为0的情况就减一
if(d==0.0){
count--;
}
}
System.out.print(count);
for(int a = MaxCount;a>=0;a--){
if(map.containsKey(a)){
if(map.get(a)==0) continue;//跳过输出系数为零的一项
else System.out.print(" "+a+" "+df.format(map.get(a)));//格式化输出
}
}
System.out.println("");
}
}
感谢大家的观看!