题目
多项式乘法,输出即可
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 3 3.6 2 6.0 1 1.6
代码和思路
#include<cstdio>
int main() {
float K[2001];
float K1[2001];
int temp1;
float temp2;
int n1, n2;
int _temp1;
float _temp2;
for (int i = 0; i < 2001; i++) {
K[i] = 0.0;
K1[i] = 0.0;
}
scanf("%d", &n1);
for (int i = 0; i < n1; i++) {
scanf("%d %f", &temp1, &temp2);
K[temp1] += temp2;
}
scanf("%d", &n2);
for (int i = 0; i < n2; i++) {
scanf("%d %f", &temp1, &temp2);
_temp1 = temp1;
_temp2 = temp2;
for (int j = 0; j < 2001; j++) {
temp1 = _temp1;
temp2 = _temp2;
temp2 = temp2 * K[j];
temp1 = temp1 + j;
if (temp2 != 0) {
K1[temp1] += temp2;
}
}
}
int flag = 0;
for (int i = 0; i < 2001; i++) {
if (K1[i] != 0) flag++;
}
printf("%d", flag);
for (int i = 2000; i >= 0; i--) {
if (K1[i] != 0) {
printf(" %d %.1f", i, K1[i]);
}
}
return 0;
}
整体思路:可以先将第一串输入记录下来,然后第二串边输入边处理
注意点:
- 因为边输入边处理,所以一定要记得保留初始输入值,忘记的话会导致整体错误处理如下:
for (int i = 0; i < n2; i++) {
scanf("%d %f", &temp1, &temp2);
_temp1 = temp1;
_temp2 = temp2;
for (int j = 0; j < 2001; j++) {
temp1 = _temp1;
temp2 = _temp2;
temp2 = temp2 * K[j];
temp1 = temp1 + j;
if (temp2 != 0) {
K1[temp1] += temp2;
}
}
}
- 数组长度定义为2001,这个试出来的,我没看太懂为什么是这个长度。
- 这个代码其实写的很笨重,没有用到什么巧解的方式,但是还没研究出来怎么做。。。