本來計劃一個暑假多刷一些關于PAT的題目,以及提升一下自己的編程能力。
結果,暑假倒是過去了,也步入研二了,但是這些文章呢,一直遲遲沒有寫出來。
我感覺非常不好意思,所以,從今天開始,我又回來繼續寫這些關于編程的文章了。
一方面呢,是為了提升自己的實力,另一方面呢,也是為了讓更多小夥伴能跟我一起提升編程技術。
今天這道題目呢,是收錄在PAT乙級中的第1010題,也就是一元多項式求導。
題目要求如下:
1、以指數遞降的方式輸入多項式非零項系數和指數(絕對值均為不超過1000的整數),但這個括号裡的内容,其實并無太大作用,其實可以忽略這個,因為在這道題目裡,它并沒有要求對整數的絕對值進行一個判斷。
2、要求以與輸入相同的格式來輸出結果,也就是輸出導數多項式的非零項系數和指數,但是結尾不能有多餘空格,以及要特别注意一點:“零多項式”的指數和系數都是0,表示為0 0。
我來根據題目給的例子,來講清楚這道題目的實現原理。
實現原理分析
我一直認為,在正式開始做編程題之前,理清邏輯是非常重要的。
而流程圖恰好能幫助我們來理清邏輯。
繪出流程圖,理清楚程序邏輯
如上圖所示,這就是該程序的流程圖。
代碼實現根據該流程圖,我們就能梳理清楚如何寫代碼。
1、要輸入非零項指數和系數,也就是需要用到一個scanf函數來分别輸入指數和系數。
而且是要在循環輸入,這裡呢因為沒有指定輸入指數和系數的數量,所以可以用到一個while(1)作為默認值,以及之後進行一個if語句判斷,如果回車enter之後,那就退出該循環。
可以用到if(getchar()!='\n')來進行回車輸入判斷。
2、對零多項式進行一個判斷,我們可以注意到,求導之前的一元多項式,是有常數項的,也就是-2x^0,求導之後得到的指數系數分别為0和-1,常數項的導數為0。
還有零多項式的指數和系數都為0,我們隻需要考慮系數為0的情況,因為指數為0的時候,這個數就直接為0了。
3、這也是我在之前的幾篇文章中一直會提到的,就是最後一列沒有空格的問題,完全可以新定義一個變量count,然後開始進行記錄,如果>0的時候,就輸出空格,就是每一次輸出之後加上空格,直到最後一次為止是沒有空格的。
在做這道題目的時候,我也遇到過許多問題:
錯誤踩點比方說我沒有對printf("0 0")進行一個額外判斷,要注意,這種情況,隻有當number2為0的時候,且還要滿足一個條件,也就是在輸出結果最終為0的時候,不要出現重複的0,也就是需要把0給隐藏。
問題代碼部分:
//一元多項式求導
#include<stdio.h>
int main(){
int number1 = 0;
int number2 = 0;
int count = 0;
while(1){
scanf("%d %d", &number1, &number2);
if(number2==0){//這部分代碼是存在問題的,所以需要更改。
printf("0 0");
}
if(number2!=0){
if(count>0){
printf(" ");
}
printf("%d %d", number1*number2, number2-1);
count ;
} //這裡就是需要特别關注的地方了,為什麼需要用到count來進行計數,就是為了解決空格
//空格問題需要在這裡來進行解決,因為我們在第一次輸出結果的時候
//是從最開始開始的,比方說從12 3這樣是一對,那麼下一對-10 1與這一對之間是有一個空格隔開的
//所以需要用到一個count
//至于上面的printf("0 0");部分,就是當count為初始值的時候,也就是不滿足count不為零的時候
if(getchar()=='\n'){
break;
}
}
return 0;
}
正确結果與代碼實現
//一元多項式求導
#include<stdio.h>
int main(){
int number1 = 0;
int number2 = 0;
int count = 0;
while(1){
scanf("%d %d", &number1, &number2);
if(number2==0){
if(count==0){
printf("0 0");
}
}
if(number2!=0){
if(count>0){
printf(" ");
}
printf("%d %d", number1*number2, number2-1);
count ;
}
if(getchar()=='\n'){
break;
}
}
return 0;
}
測試結果
很顯然結果是正确的,但是呢,在具體做題的時候我會遇到許多問題,需要靜下心來一點點來解決,最終成功完成這道題目了。
總結總的來說,這道題目其實難度并不大,但是需要細心細心再細心,不然就會出很多錯誤,特别是注意用到while循環,以及用條件語句對回車結束循環進行判斷。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!