PAT (Basic Level) Practice 1010 一元多项式求导

题目

设计函数求一元多项式的导数。(注: x n ​ ​ {x^n}​​ xn n n n为整数)的一阶导数为 n x n − 1 n{x^{n−1}} nxn1​​。)

输入格式:

以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。

输出格式:

以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 0,但是表示为 0 0

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

思路&总结(2020-4-12 00:19:52)

  1. 输入应该都是成对的,一个系数 k k k ,一个指数 n n n,只要指数不为 0 0 0,求导之后系数就是 k × n k \times n k×n,指数变成 n − 1 n-1 n1
  2. 如果指数为 0 0 0,即常数项,那求导结果系数就是 0 0 0,指数也为 0 0 0
  3. 不用想怎么存储了,直接输出!拿到一对输出一对。
  4. 再注意一下输出控制就ok。(The hardest point of this question)
  5. 还有输入结束判断,现在想想刚刚写的代码,觉得自己就是个哈皮。
  6. 这种没有指定输入数量,没有特殊结束标准的输入,可以用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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值