主要思路:创建一个TreeMap,每个多项式对应k项依次输入指数系数,哈希表key值为指数,value值为系数。每次输入一对值,
把相同指数对应的系数相加,就是两个多项式的和。结果的非零项数为哈希表中value值不为0.0的项数(系数可能有正有负相加为零)
题目要求按指数降序输出,而java的TreeMap是是利用comparator 进行key的自然排序的,对应整数是升序排列的,所以要逆向
遍历表输出,且同时判断系数是否为0.0。至于TreeMap的反向遍历,我暂时搜不到简便的方法,就模拟了一个堆栈(其实建立堆栈并访
问也挺简单。
HashMap是按照key的HashCode排序的
TreeMap是是利用comparator 进行key的自然排序的。
LinkedHashMap是按照元素加入的顺序。
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
class Inf{
int a;
double b;
}
public class Main {static Scanner sc = new Scanner(System.in);
static TreeMap<Integer, Double> map = new TreeMap<Integer, Double>();
static int k, a;
static double b;
static int sum=0;
static int pos=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
k = sc.nextInt();
vo(k);
k = sc.nextInt();
vo(k);
for(Entry<Integer,Double>entry:map.entrySet()) {
if(entry.getValue()!=0.0&&entry.getValue()!=-0.0) {
sum++;
}
}
System.out.print(sum);
Inf[] stack=new Inf[map.size()];
for(int i=0;i<map.size();i++) {
stack[i]=new Inf();
}
for(Entry<Integer,Double> entry:map.entrySet()) {
if(entry.getValue()!=0.0) {
stack[pos].a=entry.getKey();
stack[pos++].b=entry.getValue();
}
}
for(int i=pos-1;i>=0;i--) {
System.out.printf(" %d %.1f",stack[i].a,stack[i].b);
}
}
static void vo(int k) {
for (int i = 0; i < k; i++) {
a = sc.nextInt();
b = sc.nextDouble();
if (map.containsKey(a) == false) {
map.put(a, b);
} else {
map.put(a, map.get(a) + b);
}
}
}
}
如有改进建议请提出,不胜感激!