给你两个一元多项式,输出这两个一元多项式的乘积。 本题是附加代码模式,主函数main会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉附加代码。 附加代码如下: int main(){ // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin); // freopen("/config/workspace/answer/DataStructure/test.out","w",stdout); List list1 = InputList(); List list2 = InputList(); List list = mul(list1, list2); PrintList(list); return 0; } 输入 输入包含两行,每行一个一元多项式。 每行开头一个小于10000的正整数n,表示该多项式非零项项数,后面有n组数字,每组数字包含两个数字,按顺序分别为该项的系数和指数。 输出 输出包含一行,按指数从大到小的顺序输出乘积的非0项的系数与指数,以空格分隔开。 如果最终结果为0,直接输出0 0。 样例输入 复制 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 样例输出 复制 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 提示 代码框架如下,请完成相关函数的代码实现 #include <iostream> #include <cstdio> #include <cstring> using namespace std; struct Node{ int r; // 系数 int e; // 指数 }; // 线性表存储一元多项式 struct List{ Node data[10000+5]; int len; }; // 输出多项式 void PrintList(const List& list){ } // 输入多项式 List InputList(){ } // 多项式乘积 List mul(const List& list1, const List& list2){ } int main(){ // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin); List list1 = InputList(); List list2 = InputList(); List list = mul(list1, list2); PrintList(list); return 0; } 来源/分类
理解问题给你两个一元多项式,输出这两个一元多项式的乘积。 本题是附加代码模式,主函数main会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉附加代码。 附加代码如下: int main(){ // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin); // freopen("/config/workspace/answer/DataStructure/test.out","w",stdout); List list1 = InputList(); List list2 = InputList(); List list = mul(list1, list2); PrintList(list); return 0; } 输入 输入包含两行,每行一个一元多项式。 每行开头一个小于10000的正整数n,表示该多项式非零项项数,后面有n组数字,每组数字包含两个数字,按顺序分别为该项的系数和指数。 输出 输出包含一行,按指数从大到小的顺序输出乘积的非0项的系数与指数,以空格分隔开。 如果最终结果为0,直接输出0 0。 样例输入 复制 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 样例输出 复制 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 提示 代码框架如下,请完成相关函数的代码实现 #include <iostream> #include <cstdio> #include <cstring> using namespace std; struct Node{ int r; // 系数 int e; // 指数 }; // 线性表存储一元多项式 struct List{ Node data[10000+5]; int len; }; // 输出多项式 void PrintList(const List& list){ } // 输入多项式 List InputList(){ } // 多项式乘积 List mul(const List& list1, const List& list2){ } int main(){ // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin); List list1 = InputList(); List list2 = InputList(); List list = mul(list1, list2); PrintList(list); return 0; } 来源/分类
已完成理解「给你两个一元多项式,输出这两个一元多项式的乘积。 本题是附加代码模式,主函数main会自动附加在同学们提交的代码后面,请同学们在提交的时候注释掉附加代码。 附加代码如下: int main(){ // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin); // freopen("/config/workspace/answer/DataStructure/test.out","w",stdout); List list1 = InputList(); List list2 = InputList(); List list = mul(list1, list2); PrintList(list); return 0; } 输入 输入包含两行,每行一个一元多项式。 每行开头一个小于10000的正整数n,表示该多项式非零项项数,后面有n组数字,每组数字包含两个数字,按顺序分别为该项的系数和指数。 输出 输出包含一行,按指数从大到小的顺序输出乘积的非0项的系数与指数,以空格分隔开。 如果最终结果为0,直接输出0 0。 样例输入 复制 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 样例输出 复制 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 提示 代码框架如下,请完成相关函数的代码实现 #include <iostream> #include <cstdio> #include <cstring> using namespace std; struct Node{ int r; // 系数 int e; // 指数 }; // 线性表存储一元多项式 struct List{ Node data[10000+5]; int len; }; // 输出多项式 void PrintList(const List& list){ } // 输入多项式 List InputList(){ } // 多项式乘积 List mul(const List& list1, const List& list2){ } int main(){ // freopen("/config/workspace/answer/DataStructure/test.in","r",stdin); List list1 = InputList(); List list2 = InputList(); List list = mul(list1, list2); PrintList(list); return 0; } 来源/分类」
展开阅读网页
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct Node {
int r; // 系数
int e; // 指数
};
// 线性表存储一元多项式
struct List {
Node data[10000+5];
int len;
};
// 输出多项式
void PrintList(const List& list) {
for (int i = 0; i < list.len; i++) {
cout << list.data[i].r << " " << list.data[i].e;
if (i != list.len - 1) cout << " ";
}
}
// 输入多项式
List InputList() {
List list;
int n, coef, exp;
cin >> n;
list.len = n;
for (int i = 0; i < n; i++) {
cin >> coef >> exp;
list.data[i].r = coef;
list.data[i].e = exp;
}
return list;
}
// 多项式乘积
List mul(const List& list1, const List& list2) {
List result;
result.len = list1.len * list2.len;
int idx = 0;
for (int i = 0; i < list1.len; i++) {
for (int j = 0; j < list2.len; j++) {
Node term;
term.r = list1.data[i].r * list2.data[j].r;
term.e = list1.data[i].e + list2.data[j].e;
if (idx > 0 && term.e == result.data[idx-1].e) {
result.data[idx-1].r += term.r;
if (result.data[idx-1].r == 0) idx--;
} else {
result.data[idx++] = term;
}
}
}
result.len = idx;
// 按指数从大到小排序
for (int i = 0; i < result.len; i++) {
for (int j = i + 1; j < result.len; j++) {
if (result.data[i].e < result.data[j].e) {
Node temp = result.data[i];
result.data[i] = result.data[j];
result.data[j] = temp;
}
}
}
return result;
}
int main() {
List list1 = InputList();
List list2 = InputList();
List list = mul(list1, list2);
PrintList(list);
return 0;
}