题目内容:
一个多项式可以表达为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
输出样例:
时间限制:500ms内存限制:32000kb
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| package 零基础学Java语言_翁恺;
import java.util.Scanner;
public class Fifth_Week {
public static void main(String[] args) { Scanner in = new Scanner(System.in); int[] a = new int[101]; int m = 0, n = 0; boolean flag = false; for(int i=0;i<100;i++) a[i]=0; int m_max = 0; do { m = in.nextInt(); n = in.nextInt(); a[m] = n; if (m > m_max) m_max = m; }while(m!=0); do { m = in.nextInt(); n = in.nextInt(); a[m] += n; if (m > m_max) m_max = m; }while (m!=0); for (int j = m_max; j >=0; j--) { if (a[j] != 0) { if(a[j]>0&&flag==true) System.out.print("+"); if(a[j]!=1) System.out.print(a[j]); if(j!=1&&j!=0) System.out.print("x"+j); if(j==1) System.out.print("x"); flag=true; } } in.close(); }
}
|
只有一个测试点没过.....不想改了.....
总结:
用一个大小为101的数组来存系数,数组的下标即为幂指数....
若系数不为0则输出...
需要注意的是:
系数为1或-1时不用输出系数;
系数小于0时,不输出加号;
幂指数为1时,不输出幂指数;
幂指数为0时,只输出系数;
开始的思路是对幂指数为0或1时的输出单独处理,但没有考虑到系数为1或-1的情况...导致没有一个测试点通过...
错误代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| package 零基础学Java语言_翁恺;
import java.util.Scanner;
public class Fifth_Week {
public static void main(String[] args) { Scanner in = new Scanner(System.in
); int[] a = new int[101]; int m = 0, n = 0; boolean flag = false; for(int i=0;i<100;i++) a[i]=0; int m_max = 0; do { m = in.nextInt(); n = in.nextInt(); a[m] = n; if (m > m_max) m_max = m; }while(m!=0); do { m = in.nextInt(); n = in.nextInt(); a[m] += n; if (m > m_max) m_max = m; }while (m!=0); for (int j = m_max; j > 1; j--) { if (a[j] != 0) { if (flag&&a[j]>0) System.out.print("+"); if(a[j]==-1) System.out.print("-"); flag = true; System.out.print(a[j] + "x" + j); } else continue; } if (a[1] != 0) { if (flag&&a[1]>0) System.out.print("+"); if(a[1]==-1) System.out.print("-"); System.out.print(a[1] + "x"); flag = true; } if (a[0] != 0) { if (flag) System.out.print("+"); System.out.print(a[0]); } in.close(); }
}
|
补充:
把源码发到了MOOC的讨论区,在热心网友的帮助下,终于找到了有一个测试点没通过的原因.....
对于系数全部为0的情况,程序会无输出.....
例:对于下列这组数据
6 3
2 5
0 3
6 -3
2 -5
0 -3
在`in.close()`前面加上这一段就好了
`if(!flag)`
` System.out.print("0");`