美文网首页程序员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语言描述)

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