PAT (Advanced Level) Practice1002 A+B for Polynomials (25 分)(Java实现)

本文详细介绍了一种解决多项式加法问题的算法,通过Java实现,解析输入的两个多项式,计算它们的和并输出结果。算法首先读取每个多项式的项数,然后逐项读取指数和系数,存储在列表中。通过比较两个多项式的每一项,合并相同指数的项,最终输出简化后的多项式表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全部答案(持续更新)

Problem Description

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 N 1 a N 1 N 2 a N 2 . . . N K a N K K N_1 a_{N_1} N_2 a_{N_2}... N_K a_{N_K} KN1aN1N2aN2...NKaNK
​where K is the number of nonzero terms in the polynomial, N​i​​ and aNi​​ (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1 ≤ K ≤ 10 , 0 ≤ N K &lt; ⋯ &lt; N ​ 2 ​ ​ &lt; N ​ 1 ≤ 1000 1≤K≤10,0≤N_K&lt;⋯&lt;N​_2​​ &lt;N_​1≤1000 1K100NK<<N2<N11000.

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

代码示例(Java实现)

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * 写的时候,一直没有想起来系数为 0 后,应该消去这一项
 * 
 * @create-date 2019-07-27 18:22
 */
public class Main {

    static class Node {
        double coefficient;
        int exponent;

        public Node (double coefficient, int exponent) {
            this.coefficient = coefficient;
            this.exponent = exponent;
        }

        @Override
        public String toString() {
            return exponent + " " + (coefficient == 0 ? 0 : String.format("%.1f", coefficient));
        }
    
    }

    public static void main(String[] args) throws IOException {
        Reader.init(System.in);
        List<Node> list1 = new ArrayList<>();
        List<Node> list2 = new ArrayList<>();
        int count1 = Reader.nextInt();
        for (int i = 0; i < count1; i++) {
            // 获取到指数 exponent
            int exponent = Reader.nextInt();
            // 获取到系数 coefficient
            double coefficient = Reader.nextDouble();
            // 创建一个结点,并添加到集合中
            list1.add(new Node(coefficient, exponent));
        }
        // 获取第二个多项式
        int count2 = Reader.nextInt();
        for (int i = 0; i < count2; i++) {
            // 获取到指数 exponent
            int exponent = Reader.nextInt();
            // 获取到系数 coefficient
            double coefficient = Reader.nextDouble();
            // 创建一个结点,并添加到集合中
            list2.add(new Node(coefficient, exponent));
        }
        // 创建一个集合来存储计算的结果
        List<Node> result = new ArrayList<>();
        int i = 0, j = 0;
        for (; i < list1.size() && j < list2.size();) {
            Node nodei = list1.get(i);
            Node nodej = list2.get(j);
            if (nodei.exponent > nodej.exponent) {
                result.add(nodei);
                i++;
            } else if (nodei.exponent == nodej.exponent) {
                result.add(new Node(nodei.coefficient + nodej.coefficient, nodei.exponent));
                i++;
                j++;
            } else {
                result.add(nodej);
                j++;
            }
        }
        while (i < list1.size()) {
            result.add(list1.get(i++));
        }
        while (j < list2.size()) {
            result.add(list2.get(j++));
        }
		
		// 将结果中系数为 0 的项删除掉
        List<Node> filterResult = new ArrayList<>();
        for (Node aResult : result) {
            if (aResult.coefficient != 0) {
                filterResult.add(aResult);
            }
        }
        System.out.print(filterResult.size());
        for (Node aResult : filterResult) {
            System.out.print(" " + aResult);
        }
    }

}

class Reader {

    static BufferedReader reader;
    static StringTokenizer tokenizer;

    /** call this method to initialize reader for InputStream */
    public static void init(InputStream input) {
        reader = new BufferedReader(new InputStreamReader(input));
        tokenizer = new StringTokenizer("");
    }

    public static String nextLine() throws IOException {
        return reader.readLine();
    }

    /** get next word */
    public static String next() throws IOException {
        while (!tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }

    public static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    public static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

}

1002 A+B for Polynomials 是一道编程题目,通常是在考察Java中处理多项式加法的问题。在这个问题中,你需要编写一个程序,让用户输入两个多项式的系数(如a_n*x^n + a_{n-1}*x^{n-1} + ... + a_1*x + a_0的形式),然后计算它们的和,并按照同样的形式表示出来。 在Java中,你可以创建一个`Polynomial`类,包含一个数组来存储系数和最高次数的信息。用户输入的每个多项式可以被解析成这样的结构,然后通过遍历并累加系数来完成加法操作。最后,将结果转换回字符串形式展示给用户。 以下是简化版的代码示例: ```java class Polynomial { int[] coefficients; int degree; // 构造函数,初始化数组 public Polynomial(int[] coeffs) { coefficients = coeffs; degree = coefficients.length - 1; } // 加法方法 Polynomial add(Polynomial other) { Polynomial result = new Polynomial(new int[coefficients.length + other.coefficients.length]); for (int i = 0; i < coefficients.length; ++i) { result.coefficients[i] += coefficients[i]; } for (int i = 0; i < other.coefficients.length; ++i) { result.coefficients[i + coefficients.length] += other.coefficients[i]; } result.degree = Math.max(degree, other.degree); return result; } @Override public String toString() { StringBuilder sb = new StringBuilder(); if (degree >= 0) { for (int i = degree; i >= 0; --i) { sb.append(coefficients[i]).append('*x^').append(i).append(" + "); } // 移除最后一个 " + " sb.setLength(sb.length() - 2); } else { sb.append("0"); } return sb.toString(); } } // 主函数示例 public static void main(String[] args) { Polynomial poly1 = new Polynomial(...); // 用户输入第一个多项式的系数 Polynomial poly2 = new Polynomial(...); // 用户输入第二个多项式的系数 Polynomial sum = poly1.add(poly2); System.out.println("Result: " + sum); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值