版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/84677684
我的数据结构与算法题目集代码仓:https://github.com/617076674/Data-structure-and-algorithm-topic-set
原题链接:https://pintia.cn/problem-sets/15/problems/710
题目描述:
知识点:哈希表
思路:用两个大小为1001的数组分别存储两个输入多项式的系数和指数
本题是PAT-ADVANCED1002——A+B for Polynomials和 PAT-ADVANCED1009——Product of Polynomials的综合。
用一个大小为2001的数组存储乘积多项式,一个大小为1001的数组存储和多项式。
时间复杂度是O(K1 * K2),其中K1和K2分别是两个输入多项式的项数。空间复杂度是O(1000)。
C++代码:
#include<iostream>
using namespace std;
int nums1[1001], nums2[1001], multiNums[2001], sumNums[1001];
void read(int nums[]);
void print(int nums[], int size);
int main() {
read(nums1);
read(nums2);
fill(multiNums, multiNums + 2001, 0);
for(int i = 0; i < 1001; i++) {
for(int j = 0; j < 1001; j++) {
multiNums[i + j] += nums1[i] * nums2[j];
}
}
print(multiNums, 2001);
fill(sumNums, sumNums + 1001, 0);
for(int i = 0; i < 1001; i++) {
sumNums[i] = nums1[i] + nums2[i];
}
print(sumNums, 1001);
return 0;
}
void read(int nums[]) {
fill(nums, nums + 1001, 0);
int K; //非零项的个数
scanf("%d", &K);
int c, e;
for(int i = 0; i < K; i++) {
scanf("%d %d", &c, &e);
nums[e] = c;
}
}
void print(int nums[], int size) {
int count = 0;
for(int i = 0; i < size; i++) {
if(nums[i] != 0) {
count++;
}
}
if(count == 0) {
printf("0 0\n");
} else {
bool first = true;
for(int i = size - 1; i >= 0; i--) {
if(nums[i] != 0) {
if(first) {
first = false;
printf("%d %d",nums[i], i);
} else {
printf(" %d %d",nums[i], i);
}
}
}
printf("\n");
}
}
C++解题报告:
扫描二维码关注公众号,回复:
4373540 查看本文章