1010 一元多項式求導 C/C++
阿新 • • 發佈:2021-02-02
1010 一元多項式求導 (25分)
設計函式求一元多項式的導數。(注:xn(n為整數)的一階導數為nxn−1。)
輸入格式:
以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過 1000 的整數)。數字間以空格分隔。
輸出格式:
以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意“零多項式”的指數和係數都是 0,但是表示為 0 0。
輸入樣例:
3 4 -5 2 6 1 -2 0
輸出樣例:
12 3 -10 1 6 0
思路:
設定兩個結構體陣列x0,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,結束輸入。
程式碼
#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乙級真題