分析:
开一个数组 a [ ] a[] a[] ,用来存放对应指数的系数,例如 a [ e ] a[e] a[e] 的值就是指数 e e e 的项的系数 k k k,下标是指数,元素是系数。另开一个数组 s [ ] s[] s[],存放运算完的多项式情况。
从低次项到高次项进行枚举,通过求导公式修改数组 s [ ] s[] s[] 的元素,即当指数为 e e e 的系数为 k k k 的(项)求完导后的情况为:指数为 e − 1 e - 1 e−1 系数为 e ∗ k e * k e∗k,。同时计数不为零的导数项的个数。
最后从高次项到低次项进行枚举,输出非零项的系数和指数。
另外需要注意的是:如果求导后没有任何非零项,需要输出 0 0 0 0 0 0,这是本题的一个边界情况。
代码(C++)
#include <iostream>
using namespace std;
const int N = 1010;
int a[N], s[N]; // a 存储输入的多项式的系数和指数的情况 s 存储求完导后的多项式的系数和指数的情况
int main()
{
int e, k, cnt = 0;
while (cin >> k >> e) a[e] = k;
// 第 0 项求导恒为 0,因此我们从第 1 项开始求导
for (int i = 1; i < N; i ++)
{
s[i - 1] = a[i] * i;
if (s[i - 1] != 0) cnt ++;
}
// 判断是否有非零项系数
if (cnt == 0) cout << "0 0" << endl; // 本题的边界条件
else
{
for (int i = N; i >= 0; i --)
{
if (s[i] != 0)
{
cout << s[i] << ' ' << i;
cnt --;
if (cnt != 0) cout << ' ';
}
}
}
}