题目内容:
一个多项式可以表达为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
时间限制:500ms
内存限制:32000kb
代码:
package 零基础学Java语言_翁恺;
import java.util.Scanner;
public class Fifth_Week
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
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的情况...导致没有一个测试点通过...
错误代码如下:
package 零基础学Java语言_翁恺;
import java.util.Scanner;
public class Fifth_Week
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
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;
}
// 处理幂次为1的情况
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;
}
// 处理幂次为0的情况
if (a[0] != 0)
{
if (flag)
System.out.print("+");
System.out.print(a[0]);
}
// System.out.println();
in.close();
}
}
补充:
把源码发到了MOOC的讨论区,在热心网友的帮助下,终于找到了有一个测试点没通过的原因.....
对于系数全部为0的情况,程序会无输出.....
例:对于下列这组数据
6 3
2 5
0 3
6 -3
2 -5
0 -3
在in.close()前面加上这一段就好了
if(!flag)
System.out.print("0");