PAT 1002 A+B for Polynomials JAVA

12 篇文章 0 订阅

1023 组个最小数 (20 分)

This time, you are supposed to find A+B where A and B are two polynomials.

Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N1 aN​1 N2 a​N2​​ … NK aNK
where K is the number of nonzero terms in the polynomial,
Niand a​Ni (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤NK<⋯<N2<N1≤1000.

Output Specification:
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output:

3 2 1.5 1 2.9 0 3.2
题目大概

每个输入文件包含一个测试用例。每个case占用2行,每一行包含一个多项式的信息:K N1 aN​1 N2 a​N2​​ … NK aNK
其中K是多项式中非零项的个数,N~ i~和a Ni (i=1,2, K)分别是指数和系数。1≤K≤10,0≤NK<⋯<N2<N1≤1000。

做题思路

创建一个数组m[i]来存储的指数和系数。令i 为指数,m[i]为该指数对应的系数。

注意

这道题写了好久,陷在一个圈中出不来了,参考了其他大佬的解题,换了一种思路才搞出来的。
1.系数可以为负;
2.系数要保留一位小数,我测试时发现java中float类型 2.4+(-0.5)=1.9000001 为了避免这种情况,需要设定结果保留一位小数,这里我使用了String.format("%.1f",m[i]);
3.注意K是多项式中非零项的个数,,如果系数和相加为0的话,此项是不输出的!!!
这些坑我都踩了…

完整代码展示
import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
    	Scanner input = new Scanner(System.in);//输入
    	int A = input.nextInt();
    	float m[] = new float[1001];
    	for(int i=0;i<1001;i++) {
    		m[i]=0;
    	}
    	for(int i=0;i<A;i++) {
    		int mm = input.nextInt();
    		m[mm] += input.nextFloat();
    	}
    	int B = input.nextInt();
    	int sum = 0;
    	for(int i=0;i<B;i++) {
    		int qq = input.nextInt();
    		m[qq] += input.nextFloat();
    	}
    	
    	for(int i=1000;i>=0;i--) {
        	if(m[i]!=0) {
        		sum++;
        	}
        }
    	System.out.print(sum);
        for(int i=1000;i>=0;i--) {
        	if(m[i]!=0) {
        		System.out.print(" "+i+" "+String.format("%.1f",m[i]));
        	}
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值