1. 程式人生 > 其它 >1010 一元多項式求導 C/C++

1010 一元多項式求導 C/C++

技術標籤:c語言c++

1010 一元多項式求導 (25分)

設計函式求一元多項式的導數。(注:x​n(n為整數)的一階導數為nxn−1。)

輸入格式:

以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過 1000 的整數)。數字間以空格分隔。

輸出格式:

以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意“零多項式”的指數和係數都是 0,但是表示為 0 0。

輸入樣例:

3 4 -5 2 6 1 -2 0

輸出樣例:

12 3 -10 1 6 0

思路:

設定兩個結構體陣列x0,x1,第一個結構體陣列儲存輸入的多項式的非零項係數指數。將輸入的多項式求導

後,將求導後的多項式係數指數儲存到第二個結構體陣列。輸出時只要輸出x1中的非零項。
因為輸入的數絕對值都不超過1000,算上負數最多有2001個單項,因此陣列只要大於2001就行了。

注意:題目有提醒說“零多項式”也就是y = 0x0表示為 0 0,所以當y’ = 0時輸出0 0.

題目並沒有說明什麼情況下結束輸入,我們可以通過在迴圈條件裡輸入來控制輸入個數,當輸入檔案讀到結束字元^Z時scanf會返回EOF。

while(scanf("%d %d",&a,&b) != EOF){

}

自己在測試的時候可以通過“Ctrl+Z”來輸入^Z,結束輸入。
通過“Ctrl+Z”來輸入^Z並結束輸入

程式碼

#include<stdio.h>
#define MAX 2005 struct X{ int a; int n; }x0[MAX],x1[MAX]; int main(void) { int a,b,z = 0,l = 0; int i; while(scanf("%d %d",&a,&b) != EOF){ x0[l].a = a; x0[l].n = b; l++; } for(i = 0;i < l;i++){ if(x0[i].n != 0){ //Xn n!=0 x1[i].a = x0[i].a*x0[i].n; x1[i].n = x0[i]
.n-1; }else{ //X0 x1[i].a = 0; x1[i].n = 0; } } for(i = 0;i < l;i++){ if(x1[i].a != 0){ if(z != 0){ printf(" "); } printf("%d %d",x1[i].a,x1[i].n); z++; } } /* 測試點2要求必須要有輸出 比如輸入“1 0”要求輸出“0 0” 這個點卡了我好久 */ if(z == 0){ printf("0 0\n"); } return 0; }

寫完後看到了柳婼的程式碼,非常的漂亮簡潔,真不愧是柳神,我完全比不過OrL:1010. 一元多項式求導 (25)-PAT乙級真題