自学内容网 自学内容网

PAT-1010 一元多项式求导(java实现)

这题目看的我很费劲,读了好几遍,理解题目之后还是很简单的。

官方题目:

设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。

输出格式:

以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

解释题目:

思路:

  1. 读取输入:将输入的字符串分割为数值列表。
  2. 解析多项式项:将系数和指数成对提取。
  3. 计算导数:遍历多项式的每一项,按照导数规则计算其导数。
  4. 增加非零项:如果计算的导数项非零,则存储它的系数和指数。
  5. 输出结果:按照要求格式化输出结果。

易理解的低分答案:会有问题pat提示非零返回

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String derivative = sc.nextLine(); // 读取输入
        sc.close();

        // 将数据转化为数组
        String[] items = derivative.split(" ");
        List<Integer> res = new ArrayList<>();

        // 循环遍历拿到每对的系数和指数,根据系数和指数计算出结果数据拼接到字符串输出
        for (int i = 0; i < items.length; i += 2) {
            int coeff = Integer.parseInt(items[i]);
            int exp = Integer.parseInt(items[i + 1]);
            if (exp == 0) { // 只有指数为0的项不能计算导数
                continue;
            }
            res.add(coeff * exp);
            res.add(exp - 1);
        }

        // 检查是否有任何非零项,如果没有则返回 "0 0"
        if (res.isEmpty()) {
            System.out.println("0 0");
            return;
        }

        // 将数组转化为字符串输出,注意结尾不能有空格
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < res.size(); i++) {
            sb.append(res.get(i));
            if (i < res.size() - 1) {
                sb.append(" "); // 添加空格,但不在最后
            }
        }
        System.out.println(sb);
    }
}

 

优化后的💯答案:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int flag = 0; // 用于标记是否输出过多项式项

        // 循环处理输入
        while (scanner.hasNext()) {
            int coeff = scanner.nextInt();
            int exp = scanner.nextInt();

            // 只处理非零项且指数不为零
            if (coeff != 0 && exp != 0) {
                // 若不是第一项,先输出空格
                if (flag == 1) {
                    System.out.print(" ");
                }
                System.out.print((coeff * exp) + " " + (exp - 1));
                flag = 1; // 标记已经输出过
            }
        }

        // 若没有任何项被输出,则输出 "0 0"
        if (flag == 0) {
            System.out.print("0 0");
        }

        scanner.close(); // 关闭扫描器
    }
}

 


原文地址:https://blog.csdn.net/m0_47905795/article/details/144090367

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!