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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章