1. 程式人生 > >1010. 一元多項式求導 (25)

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

先貼一下這個題目:


這個題目,看上去並不複雜。

第一眼,感覺有些像連結串列的一元多項式的求和,當時只想了這個思路,但是沒有去實踐,第二天,時間的時候出了問題,發現連結串列的輸入沒有辦法停止,還是出在了對題目的理解上,不知道當指數為0的時候就不再錄入。現在想一下,如果仍然使用連結串列,用while(1)無限迴圈,然後當有0,錄入進去後,停止建立結點,似乎也是可行的,但是始終還是很麻煩,有一種被坑了的感覺;

然後,(還沒有在網上搜索如何迴圈錄入整數),用字元陣列來代替,當getchar錄到回車的時候,停止輸入,看似是個好方法,但是沒有考慮到負數的問題;

接著,我還是選擇用整數陣列,發現了這一點,可以用無限迴圈中加if判斷語句來在錄入指數0後及時跳出。這樣一來,這個題目的大體框架完成了。得到了19分得主體成績。

然而,還是部分正確的。所以再去看了看題目,發現題目提到了一個零多項式的問題,然而在我的程式中,並沒有體現這個問題。

零多項式是什麼?這是第一個問題。

原諒我數學(啊,拍磚)

零多項式即多項式=0,所以,按照題目要求來看,零多項式的指數係數都是0,需要表示為“0 0”,我在第一次思考的時候,是受題目中例子的影響,直接將常數項所得的求導結果不做表示,沒有想到,這與零多項式是不同的,這個思維上的錯誤與我上學以來在理科問題上犯得許多錯誤是一樣的!

於是我僅僅添加了剛開始為零多項式的情況,但是,還需要考慮到,如果變成零多項式會是什麼結果?那麼從哪裡會變成零多項式呢,即常數項,又添加了條件

做題需看題,思考需仔細,另外,注意判題結果顯示,兩個錯誤所用時間相同,可推知兩個錯誤在同一個判斷條件下生成,這是一個小技巧。

貼上程式碼:

#include
int main()
{
	int a[100],i=0,t,N;
	while(1)
	{		
		scanf("%d",&a[i]);
		if(a[i]==0&&i%2) break;
		i++;
	}//寫的過程中,這裡實現在指數輸入0之後才結束,需要思考
	N=i+1;
	if(a[1]==0)
		printf("0 0");//提交一次,部分正確,19分,後重新讀題,發現零多項式的問題,這裡是零多項式的情況,修復正確,22分,但還有一個錯誤;
	//修復過程:想到變成零多項式的情況,即本來是常數項,後來變成了零多項式,那麼不能完全不顯示,根據題意,仍應顯示0 0,所以當原多項式為常數時應該可以直接顯示0 0 
	//發現讀題目還是很重要的,部分正確就是一些點沒有考慮到,然後,可以分析執行時間,特殊情況下什麼時候會報答案錯誤,時間相同,那麼判斷的點應該相同
	else
	{	
		for(i=0;i=0)
			printf("%d %d",a[0],a[1]);
		for(i=2;i=0)
				printf(" %d %d",a[i],a[i+1]);
		}
	}
	printf("\n");
	return 0;
}
再高興地放上完全正確的圖啦!