1010 一元多項式求導 (25 分)
設計函數求一元多項式的導數。(注:xn(n爲整數)的一階導數爲nxn−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;
}