1010 一元多项式求导
题目
设计函数求一元多项式的导数。(注: x n {x^n} xn( n n n为整数)的一阶导数为 n x n − 1 n{x^{n−1}} nxn−1。)
输入格式:
以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。
输出格式:
以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0
。
输入样例:
3 4 -5 2 6 1 -2 0
输出样例:
12 3 -10 1 6 0
思路&总结(2020-4-12 00:19:52)
- 输入应该都是成对的,一个系数 k k k ,一个指数 n n n,只要指数不为 0 0 0,求导之后系数就是 k × n k \times n k×n,指数变成 n − 1 n-1 n−1。
- 如果指数为 0 0 0,即常数项,那求导结果系数就是 0 0 0,指数也为 0 0 0。
- 不用想怎么存储了,直接输出!拿到一对输出一对。
- 再注意一下输出控制就ok。(The hardest point of this question)
- 还有输入结束判断,现在想想刚刚写的代码,觉得自己就是个哈皮。
- 这种没有指定输入数量,没有特殊结束标准的输入,可以用cin来判断输入是否结束,我差点就cin.getline()了。差点爆炸。
答案1(2020-4-12 00:20:08)
- 两正确,两错误,一超时。
- 错误地方是没注意到第一项就输入常数项的情况。
- 超时的地方是没注意到最后一项可能不是0的情况
#include <iostream>
using namespace std;
int main()
{
int a ,b;
cin >> a >> b;
cout << a * b;
cout << " " << b - 1 ;
cin >> a >> b;
while(b!=0)//why the last one b must be zero?
{
cout << " " << a * b ;
cout << " " << b - 1 ;
cin >> a >> b;
}
return 0;
}
答案2(2020-4-12 00:24:38)
- 四正确,一超时。
- 超时的地方是没注意到最后一项可能不是0的情况
#include <iostream>
using namespace std;
int main()
{
int a ,b;
cin >> a >> b;
cout << a * b;
if(b != 0)//still the wrong point
{
cout << " " << b - 1 ;
cin >> a >> b;
while(b!=0)
{
cout << " " << a * b ;
if(b != 0)
cout << " " << b - 1 ;
else
cout << " " << 0 ;
cin >> a >> b;
}
}
else
cout << " " << 0 ;
return 0;
}
答案3(2020-4-12 00:25:52)
- 学习了一下大佬的操作。用cin来作为while的判断条件。
#include <iostream>
using namespace std;
int main()
{
int a ,b;
cin >> a >> b;
if(b != 0)
{
cout << a*b << " " << b - 1 ;
while(cin >> a >> b)//get it!
{
if(b != 0)
cout << " " << a * b << " " << b - 1 ;
}
}
else
{
cout << "0 0" ;
}
return 0;
}
}