這是一道非常簡單的問題,雖然敲的**都能執行,但是測評結果就是不對。分析了**,其實主要就是兩個問題:
1 .定義的變數長度不夠。變數的範圍必須完全容納 資料規模與約定 中所給的範圍。
2 . 演算法不夠簡練。這與平時做題習慣有關,總是寫完就萬事大吉了,沒有想過怎麼寫最好。
下面上題
問題描述
求1+2+3+…+n的值。
輸入格式
輸入包括乙個整數n。
輸出格式
輸出一行,包括乙個整數,表示1+2+3+…+n的值。
樣例輸入
4樣例輸出
10樣例輸入
100樣例輸出
5050
資料規模與約定
1 <= n <= 1,000,000,000。
說明:請注意這裡的資料規模。
本題直接的想法是直接使用乙個迴圈來累加,然而,當資料規模很大時,這種「暴力」的方法往往會導致超時。**如下
int n;
int i, sum=0;
scanf
("%d"
,&n)
;for
( i=
1; i<=n; i++
)printf
("%d"
,sum)
;
像這種**就只能得10分。一是超時,二是資料型別不對。
此時就需要想其他方法。可以試一下,如果使用1000000000作為你的程式的輸入,你的程式是不是能在規定的上面規定的時限內執行出來。
然後我寫出來了這種**:
int n;
long
long sum;
scanf
("%d"
,&n);if
( n>
1&& n<=
1000000000
)else
if( n=1)
printf
("%ld"
,sum)
;
但是,像這種**,就只有50分。
1 .輸出的時候答案長度還是不夠。2 .沒注意輸入時的長度。
所以本題最值得注意的地方是答案的大小不在預設的整型(int)範圍內,如果使用整型來儲存結果,會導致結果錯誤。則你的格式字串應該寫成%ild以輸出long long型別的整數。
下方是100分的**
long
long a,sum=0;
scanf
("%lld"
,&a)
; sum=(1
+a)*a/2;
printf
("%lld\n"
,sum)
;
所以正確的**往往出乎意料的簡單。 Python練習題 序列求和 選自藍橋杯
題目要求 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 求1 2 3 n的值。輸入格式 輸入包括乙個整數n。輸出格式 輸出一行,包括乙個整數,表示1 2 3 n的值。樣例輸入 4樣例輸出 10樣例輸入 100樣例輸出 5050 說明 有一些試題會給出多組樣例輸入輸出以幫助你更好...
ACM 藍橋杯練習題
小a的學校有一些小河和一些湖泊,現在把它們統一看成水池,小a手裡有一張學校某處的地圖,這個地圖上僅標識了此處是否是水池,小a想知道這塊地方有多少個水池,現在,任務交給你了,請編寫程式算出該地圖中有幾個水池 第一行輸入乙個整數n,表示共有n組測試資料 每一組資料都是先輸入該地圖的行數m 輸出該地圖中水...
藍橋杯練習題 入門訓練
序列求和 問題描述 求1 2 3 n的值。輸入格式 輸入包括乙個整數n。輸出格式 輸出一行,包括乙個整數,表示1 2 3 n的值。樣例輸入 4 樣例輸出 10 樣例輸入 100 樣例輸出 5050 資料規模與約定 1 n 1,000,000,000 這個題如果是累加計算提交會顯示超時,所以最好的方法...