1010 一元多項式求導(25 分)
設計函式求一元多項式的導數。(注:xn(n為整數)的一階導數為nxn−1。)
以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過 1000 的整數)。數字間以空格分隔。
以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意「零多項式」的指數和係數都是 0,但是表示為0 0
。
3 4 -5 2 6 1 -2 0
12 3 -10 1 6 0
這道題提交一次就通過了哈哈哈哈。不過事先檢視了別人寫的**,因為不知道如何接收資料。之前在mooc做的類似的題,好歹還給了項數,用陣列儲存即可。可是沒有給出來,處理起來就有點麻煩。借鑑了別人的**,也學習了各種關於字元處理的函式,雖然沒用上,但還是收穫不少。對了,剛開始我還想著用鍊錶做,查了之後發現大家的**都好簡單,沒有往鍊錶的方向想,我中毒太深了,怎麼想法都這麼複雜.....
#includeusing namespace std;
int main()
else
cout<<" "《其中,while(cin>>a>>b){};是一種接收不定數量的資料的一種方式。當輸入的數不是整數(a,b定義為整型數),或者遇到檔案結束符(對於如何指出檔案結束,不同的系統有不同的約定,對windows系統來說,ctrl+z,然後按enter鍵或return鍵),cin>>a>>b被判定為假,結束迴圈。需要注意的是,用cin>>的方式接收資料,空格鍵和回車鍵是作為分割符,不以它們的行為輸入資訊。我看有的人用「當接收到換行符時跳出迴圈」的思想來寫程式,也是可以的。但如果用的是while(cin>>a>>b){};這個迴圈,按下回車鍵並不能結束迴圈,這個方法與有的人用的c語言寫的while (scanf("%d%d", &n, &e) != eof){};是同一種方法。
這裡再提一嘴,有的人用「當接收到次數為零的項」作為終止迴圈的條件,好像也能通過。這個想法是預設輸入的資料最後一項一定是常數項。第一,題目並沒有說輸入的資料一定有常數項且常數項是最後一項,用這個想法寫的程式能通過,想來是測試的資料並不全面,全部都是常數項作為最後一項的測試資料。第二,題目說,非零項係數和指數是(絕對值均為不超過 1000 的整數),也就是次數可能為負數,應該也沒相應的測試資料。這個題目不嚴謹,題目中特別容易被忽略的點沒有給出相應的測試資料。
#includeusing namespace std;
int main()
else
cout << " " << a*b << " " << b - 1;
} if (b == 0 && flag == 1)//當遇到次數為0的項,依據flag判斷是否只有常數項
cout << "0 0";
} system("pause");
return 0;
}
有的人用了getchar()和ungetc()的配合,學習了。getchar()是stdio.h中的庫函式,我沒有把對應的標頭檔案包含進來,在oj和vs2015均能編譯成功......兩段**的不同之處在於讀取資料的方式不同。getchar()的作用是從stdin流中讀入乙個字元,也就是說,如果stdin有資料的話不用輸入它就可以直接讀取了。ungetc的使用是必須的。如果輸入3 4 2 1,首先3存入c,不是換行符,於是進入迴圈,這時候cin>>a>>b,a,b分別是4 2了。不是我們要做的。使用ungetc把作為迴圈條件的3退回到輸入流,a,b才分別是3 4 。這個方法我也是看了別人的才學會的,挺好。 1010 一元多項式求導
設計函式求一元多項式的導數。注 xn n為整數 的一階導數為n xn 1 輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意 零多項式 的指數...
1010 一元多項式求導
題目是pat乙級 思路 題意很嚇人,實際上並不需要多少數學知識。只要相鄰的兩個輸入數相乘就可以了。需要注意的是 只有常數項的情況。訓練目的 輸入輸出 迴圈 題目描述 設計函式求一元多項式的導數。注 xn n為整數 的一階導數為n xn 1。輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均...
1010 一元多項式求導
設計函式求一元多項式的導數。注 xn n為整數 的一階導數為n xn 1。輸入格式 以指數遞降方式輸入多項式非零項係數和指數 絕對值均為不超過1000的整數 數字間以空格分隔。輸出格式 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多餘空格。注意 零多項式 的指數...