PTA 1010 一元多项式求导 (25 分)

1010 一元多项式求导 (25 分)

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

输入格式:

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

输出格式:

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

输入样例:

3 4 -5 2 6 1 -2 0

输出样例:

12 3 -10 1 6 0

题记:

这道题看起来挺简单,开两个数组(或者一个结构体),一个表示系数,一个表示指数就做出来了,但是小坑挺多,改了很多次才通过所有的测试样例。需要注意以下几点:

1.“零多项式”,输入为“0 0”,需要输出“0 0”;

2.求导后的系数最大为1000000,int就够了。

3.控制空格的输出。有两种方法:①最后一项后面不输出空格,之前的项输出后都输出一个空格。②第一项前面不输出空格,之后的输出前面都加个空格。

C++程序如下:

#include <iostream>
using namespace std;

struct {
	int x, y;
} a[1001];

int main() {
	int n = 0, f = 0;
	while (cin >> a[n].x >> a[n].y) {
		n++;
	}
	for (int i = 0; i < n; i++) {
		if (a[i].y != 0) {
			if (i){
				cout << " ";
			}
			cout << a[i].x * a[i].y << ' ' << a[i].y - 1;
			f = 1;
		}
	}
	if (f == 0)  //零多项式的情况
		cout << "0 0";
	cout << endl;
	return 0;
}

ps:我自己写的代码有一个测试样例通不过,不知道哪里错了,以上代码借鉴自1010 一元多项式求导 (25 分),输出部分有改动。我的代码如下,请大佬们指教。

#include <iostream>
#include <cstring>
using namespace std;

int main(void){
	int count=0, a, b, b_max;
	cin >> a >> b;
	if(a==0 && b==0){
		cout << "0 0";
	}else{
		int m[b+1], n[b+1];
    	for(int i=0; i<=b+1; i++){
	    	m[i] = 0;
	    	n[i] = 0;
    	}
    	m[b] = a;
    	n[b] = 1;
    	b_max = b;
    	while(cin >> a >> b){
    		m[b] = a;
    		n[b] = 1;
    	}
    	
    	for(int i=b_max; i>0; i--){
    		if(n[i]){
    			if(i != b_max){
    			    cout << " ";
    		    }
    	     	cout << i*m[i] << " " << i-1;
    	   	}
    	}
	}
    return 0;
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值