Pat-甲级真题——1002 A+B for Polynomials (25)(源代码与思路)

This time, you are supposed to find A+B where A and B are two polynomials.

Input

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.

Output

For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output
3 2 1.5 1 2.9 0 3.2
源代码:

提交代码





import java.util.Scanner;
import java.util.StringTokenizer;


public class Test002 {

public static void main(String[] args) {

// TODO Auto-generated method stub
float[] enter1 = new float[25]; //存放第一次输入的数据
float[] enter2 = new float[25]; //存放第二次输入的数据
int[] fi_iteam = new int[12]; //存放第一次的项数
float[] fi_numb = new float[11]; //存放第一次输入的数据
int[] se_iteam = new int[12]; //存放第二次的项数
float[] se_numb = new float[11]; //存放第二次输入的数据
char[] sum = new char[25]; //存放最终的结果
int length1 = 0, length2 = 0;
//输入模块
Scanner first = new Scanner(System.in);
Scanner second = new Scanner(System.in);



//通过调用 StringTokenizer这个类来将含有空格的数值与空格分开
//先定义字符串fi用来存放含有空格的字符串
String fi = first.nextLine();
StringTokenizer firstenter = new StringTokenizer(fi," ");
while(firstenter.hasMoreTokens()) {
//这里通过 alt+/ 来确定你要保存的数据究竟是什么类型的
enter1[length1] = Float.parseFloat(firstenter.nextToken());
length1++;
}

String se = second.nextLine();
StringTokenizer secondenter = new StringTokenizer(se," ");
while(secondenter.hasMoreTokens()) {
//这里通过 alt+/ 来确定你要保存的数据究竟是什么类型的
enter2[length2] = Float.parseFloat(secondenter.nextToken());
length2++;
}

int a = 0; int b = 0;
//判断是否数据合格
for(int i=0;i<length1;i++) {
if ((enter1[0]-(int)enter1[0]) == 0.0) { //判断是否第一个数是否为整数
fi_iteam[0]=(int)enter1[0];
//分开项数和数据
if(i%2 != 0) {
if((enter1[i]-(int)enter1[i]) == 0.0) { //判断项数是否为整数
//将项数存入fi_iteam[]里
a++;
fi_iteam[a]=(int)enter1[i];
}
}
else if(i>1) { //存放数据
//将数据存放在对应的项数对应的数组下标里
fi_numb[fi_iteam[a]] = enter1[i];
}
}
}
for(int i=0;i<length2;i++) {
if ((enter2[0]-(int)enter2[0]) == 0.0) { //判断是否第一个数是否为整数
se_iteam[0]=(int)enter2[0];
//分开项数和数据
if(i%2 != 0) {
if((enter2[i]-(int)enter2[i]) == 0.0) { //判断项数是否为整数
//将项数存入se_iteam[]里
b++;
se_iteam[b]=(int)enter2[i];
}
}
else if(i>1) { //存放数据
//将数据存放在对应的项数对应的数组下标里
se_numb[se_iteam[b]] = enter2[i];
}
}
}




//数据与项数的对应计算及输出
int max = fi_iteam[0]>se_iteam[0] ?fi_iteam[0]:se_iteam[0];
int fi_a=1,se_b=1;
if( fi_iteam[0]==fi_iteam[1] ||se_iteam[0]==se_iteam[1]) {
System.out.print(max+1);
}
else System.out.print(max);
// System.out.print(max);
for(int i = 0;i<=max;i++) {
System.out.print(' ');
if( fi_iteam[fi_a]>se_iteam[se_b]) {
System.out.print(fi_iteam[fi_a]);
System.out.print(' ');
System.out.print(fi_numb[fi_iteam[fi_a]] );
fi_a++;
}
else if(fi_iteam[fi_a]==se_iteam[se_b]) {
System.out.print(fi_iteam[fi_a]);
System.out.print(' ');
System.out.print(fi_numb[fi_iteam[fi_a]]+se_numb[se_iteam[se_b]] );
fi_a++;se_b++;
}
else {
System.out.print(se_iteam[se_b]);
System.out.print(' ');
System.out.print(se_numb[se_iteam[se_b]] );
se_b++;
}
}




}

}

PS:我的电脑运行是没有问题的,思路都注释了,而且样例也通过了,自己举的几个例子也通过了,但是

是吧,我在PAT上面没过,也懒得转成C++了,就先发了吧,可能不是太简洁,但应该很容易就能理解。。。

猜你喜欢

转载自blog.csdn.net/jack_zj123/article/details/80058019