题目源自中国大学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的次数......
本题涉及的坑总结了一下:
输出结果的控制:
正负项的考虑,系数为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());
}
}
网友评论