美文网首页程序员MOOC_零基础学Java算法 数据结构 leetcode
第五周数组_多项式加法(Java语言描述)

第五周数组_多项式加法(Java语言描述)

作者: 掌灬纹 | 来源:发表于2019-04-08 13:18 被阅读1次

题目源自中国大学MOOC翁凯老师
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出样例:
4x6+6x5+12x3+12x2+12x+40

思路:一个主要的思路,多行两列的两个二维数组存储多项式内容,即输入数据,用一个一维数组存储结果,下标对应幂次,内容对应系数
个人感觉该题难点不在于上面大体思路的讲解,而是样例涵盖的小坑太少,导致想不全一直有样例通不过(┬_┬)看看我WA的次数......

)7$X(6NG74IQ)N%MI472$1Z.png
本题涉及的坑总结了一下:
输出结果的控制:
正负项的考虑,系数为1的考虑,幂为1的考虑,
最后多项式相加结果为0的考虑

Java代码参考(看上去比较繁琐,其实没有主要思路确定顺着写就可以了)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] ans = new int[101];// 下标对应幂次,内容对应系数
        int[][] ploy1 = new int[101][2];
        int[][] ploy2 = new int[101][2];
        int times;// 每项前的系数
        int pow;// 幂
        int cnt_1 = 0;
        while (true) {
            pow = sc.nextInt();
            times = sc.nextInt();
            ploy1[cnt_1][0] = pow;
            ploy1[cnt_1][1] = times;
            cnt_1++;
            if (pow == 0)
                break;
        }
        int cnt_2 = 0;
        while (true) {
            pow = sc.nextInt();
            times = sc.nextInt();
            ploy2[cnt_2][0] = pow;
            ploy2[cnt_2][1] = times;
            cnt_2++;
            if (pow == 0)
                break;
        }
        for (int i = 0; i < cnt_1; i++) {
            ans[ploy1[i][0]] += ploy1[i][1];
        }
        for (int i = 0; i < cnt_2; i++) {
            ans[ploy2[i][0]] += ploy2[i][1];
        }

        StringBuilder res = new StringBuilder();
        for (int i = 100; i >= 0; i--) {
            if (ans[i] > 0) {
                if (ans[i] != 1) {
                    if (i == 0)
                        res.append("+" + ans[i]);
                    else if (i == 1)
                        res.append("+" + ans[i] + "x");
                    else
                        res.append("+" + ans[i] + "x" + i);
                } else {
                    if (i == 0)
                        res.append("+" + ans[i]);
                    else if (i == 1)
                        res.append("+x");
                    else
                        res.append("+x" + i);
                }

            } else if (ans[i] < 0) {
                if (ans[i] != -1) {
                    if (i == 0)
                        res.append(ans[i]);
                    else if (i == 1)
                        res.append(ans[i] + "x");
                    else
                        res.append(ans[i] + "x" + i);
                } else {
                    if (i == 0)
                        res.append(ans[i]);
                    else if (i == 1)
                        res.append("-x");
                    else
                        res.append("-x" + i);
                }
            }

        }
        char[] arr = res.toString().toCharArray();
        if (arr.length <= 0) {
            System.out.println(0);
            System.exit(0);
        }
        if (arr[0] == '+')
            System.out.println(new String(arr, 1, arr.length - 1));
        else
            System.out.println(res.toString());

    }

}

相关文章

  • 第五周数组_多项式加法(Java语言描述)

    题目源自中国大学MOOC翁凯老师题目内容:一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x6+3x5+12...

  • 一元多项式

    1 、问题描述: 功能:设计一个一元多项式加法器。 输入并建立多项式,实现两个多项式的加法运算。 要求: 1) 界...

  • 第4章编程题

    多项式加法

  • 多项式加减法 (二)

    在多项式加法 (一)中,我们介绍了多项式对应的单链表的几个接口,现在我们来完成本次实验剩余的其他几个接口。 第五步...

  • Leecode 数组形式的整数加法

    题目描述 leecode第989题:数组形式的整数加法[https://leetcode-cn.com/probl...

  • 数据结构之线性结构

    线性表及其实现 什么是线性表? 谈到线性表,我们先来做个题目!用结构体数组表示一元多项式,并且实现加法操作。 大家...

  • 多项式加法

    第一篇markdown,练习以下. 一个人对痛苦的感受能力和对无聊的感受能力成反比,这是由一个人的精神能力的大小决...

  • LeetCode—— 找到所有数组中消失的数字

    题目描述 一、CPP 1. 索引法——加法: 解题思路:把将数组元素对应为索引的位置加n,遍历加n后的数组,若数组...

  • Java 数组 编程练习题

    1、 多项式加法 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式...

  • T-15- Java 基础知识 | Java 与 C++区别

    1. Java 语言的优点 Sun Microsystems公司对Java语言的描述如下: Java is a s...

网友评论

    本文标题:第五周数组_多项式加法(Java语言描述)

    本文链接:https://www.haomeiwen.com/subject/liyuiqtx.html