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
解释题目:
思路:
- 读取输入:将输入的字符串分割为数值列表。
- 解析多项式项:将系数和指数成对提取。
- 计算导数:遍历多项式的每一项,按照导数规则计算其导数。
- 增加非零项:如果计算的导数项非零,则存储它的系数和指数。
- 输出结果:按照要求格式化输出结果。
易理解的低分答案:会有问题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)!