首页 > 试题广场 >

求两个多项式的和

[编程题]求两个多项式的和
  • 热度指数:4814 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入两个多项式,计算它们的和。 每个多项式有若干对整数表示,每组整数中,第一个整数表示系数(非0),第二个整数表示该项的次数。 如由3 3 5 -2 1 4 0表示3x^5 - 2 * x + 4其中第一个3表示该多项式由三个整数对表示。

输入描述:
输入为两行,分别表示两个多项式。表示每项的整数对按照次数大小降序给出。(次数绝对值小于1000,系数绝对值小于10000)


输出描述:
按照降次顺序输出表示和多项式的整数对(系数为0的整数对不用输出,整数对由空格分隔,最后一个整数对后不添加空格)
示例1

输入

3 3 5 -2 1 4 0
4 2 3 -1 2 1 1 3 0

输出

3 5 2 3 -1 2 -1 1 7 0
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			Map<Integer, Integer> firstMap = new HashMap<Integer, Integer>();
			Map<Integer, Integer> secondMap = new HashMap<Integer, Integer>();
			int n = scanner.nextInt();
			for(int i = 0; i < n; i++) {
				int xiShu = scanner.nextInt();
				int zhiShu = scanner.nextInt();
				firstMap.put(zhiShu,xiShu);
			}
			
			int m = scanner.nextInt();
			for (int i = 0; i < m; i++) {
				int xiShu = scanner.nextInt();
				int zhiShu = scanner.nextInt();
				secondMap.put(zhiShu,xiShu);
			}
			
			for(Map.Entry<Integer, Integer> entry : secondMap.entrySet()) {
				if (firstMap.containsKey(entry.getKey())) {
					int xiShuResult = firstMap.get(entry.getKey())+entry.getValue();
					if (xiShuResult == 0) {
						firstMap.remove(entry.getKey());
					}else {
						firstMap.put(entry.getKey(), xiShuResult);
					}
				}else {
					firstMap.put(entry.getKey(), entry.getValue());
				}
			}
			
		
			List<Map.Entry<Integer, Integer>> myList = new ArrayList<>(firstMap.entrySet());
			//按照Map的key进行排序
			myList.sort(Map.Entry.comparingByKey());
			
			for (int i = myList.size()-1; i >= 0; i--) {
				System.out.print(myList.get(i).getValue()+ " " + myList.get(i).getKey()+" ");
			}
		}
	}
}

发表于 2024-03-28 17:34:40 回复(0)
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
    	int []a=new int[10001];
    	Scanner sc=new Scanner(System.in);
    	int n1=sc.nextInt();
    	for(int i=0;i<n1;i++) {
    		int xishu=sc.nextInt();
    		int zhishu=sc.nextInt();
    		a[zhishu+1000]+=xishu;//指数可能有负数的情况
    	}
    	int n2=sc.nextInt();
    	for(int i=0;i<n2;i++) {
    		int xishu=sc.nextInt();
    		int zhishu=sc.nextInt();
    		a[zhishu+1000]+=xishu;
    	}
    	StringBuilder sb=new StringBuilder();
    	for(int i=a.length-1;i>=0;i--) {//10000
    		if(a[i]!=0)
    			sb.append(a[i]+" "+(i-1000)+" ");
    	}
    	System.out.println(sb.toString().trim());
    }
}

发表于 2020-04-08 17:22:28 回复(0)
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Main{
    public static void main(String[] args){
        Scanner scanner  = new Scanner(System.in);
        int n = scanner.nextInt();
        int[][] x = new int[n][2];
        for(int i = 0;i<n;i++){
            x[i][0] = scanner.nextInt();
            x[i][1] = scanner.nextInt();
        }
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i<n;i++){
            map.put(x[i][1],x[i][0]);
        }
        n = scanner.nextInt();
        x = new int[n][2];
        for(int i = 0;i<n;i++){
            x[i][0] = scanner.nextInt();
            x[i][1] = scanner.nextInt();
        }
        scanner.close();
        for(int i = 0;i<n;i++){
            if(map.containsKey(x[i][1])){
                int num = map.get(x[i][1]);
                
                map.put(x[i][1],num+x[i][0]);
                
            }else{
                map.put(x[i][1],x[i][0]);
            }
        }
       
        
        List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<Integer,Integer>>() {
            public int compare(Entry<Integer,Integer> o1,
                    Entry<Integer,Integer> o2) {
                return -o1.getKey().compareTo(o2.getKey());
            }

        });
        int size = list.size();
        for(int i = 0;i<size-1;i++) {
            if (list.get(i).getValue()==0) {
                continue;
            }
            System.out.print(list.get(i).getValue()+" "+list.get(i).getKey()+" "); 
            
        }
        if (list.get(size-1).getValue()!=0) {
            
            System.out.print(list.get(size-1).getValue()+" "+list.get(size-1).getKey()+" "); 
        }
        
    }
}

发表于 2018-12-30 16:45:35 回复(0)