题目B1010 一元多项式求导

-
题意
系数是指k.x^n,其中的k,指数值n,正常求导。 -
思路
因为是指数降序输入,这样不存在项的合并,所以可以边输入边处理,然后这里我通过first去控制输出格式,同时也可以作为计数来用,去控制是否输出0 0。 -
Code in C++
#include <iostream>
int main()
{
int first = 1;
long long e, n;
while (std::cin >> e >> n) {
if (n && e != 0) {
e = n * e;
n = n - 1;
if (!first) {
printf(" %d %d", e, n);
} else {
printf("%d %d", e, n);
}
first = 0;
}
}
if (first) {
printf("0 0");
}
printf("\n");
return 0;
}
题目A1009 Product of Polynomials

-
题意
这里的多项式形式还是和上面一题一样。系数是指k.x^n,其中的k,指数值n,然后这里需要每项遍历做乘法。 -
思路
因为存在项数的合并问题,这里指数是天然的非负整数,然后题目给出指数大小不会大于1000,所以最大相乘的指数大小为2000,所以这里可以将数组下标作为系数,然后对应数组位置存储最后的值。这里需要注意的是可以合并一些操作,这里其实代码也没有必要开辟两个数组然后再进行计算操作。 -
Code in C++
#include <iostream>
#define maxn 2001
double a[11];
double e[maxn] = {0.0};
int ae[11];
int main()
{
int m, n;
std::cin >> m;
for (int i = 0; i < m; ++i) {
std::cin >> ae[i] >> a[i];
}
std::cin >> n;
int be;
double b;
for (int j = 0; j < n; ++j) {
std::cin >> be >> b;
for (int i = 0; i < m; ++i) {
e[ae[i] + be] += a[i] * b;
}
}
int count = 0;
for (int i = 0; i < maxn; ++i) {
if (e[i] != 0.0) {
++count;
}
}
printf("%d", count);
for (int i = maxn - 1; i >= 0; --i) {
if (e[i] != 0.0) {
printf(" %d %.1f", i, e[i]);
}
}
std::cout << std::endl;
return 0;
}
小结
- 读懂题意,B1010是计算最终结果都为0的时候才输出
0 0 - 注意合并一些没有必要的操作,比如A1009中没必要开两个数组,在另外一个数组输入的时候就可以开始计算。
本文详细介绍了如何求解一元多项式的求导问题(B1010),以及多项式乘法问题(A1009)。在B1010中,由于输入项指数降序,可以边输入边处理。在A1009中,利用指数不超过1000的特点,用一个数组存储乘积,避免了不必要的数组操作。理解题意并合理优化算法是关键。
136

被折叠的 条评论
为什么被折叠?



