藍橋杯練習題 求和問題

2021-10-03 22:27:34 字數 1572 閱讀 2231

這是一道非常簡單的問題,雖然敲的**都能執行,但是測評結果就是不對。分析了**,其實主要就是兩個問題:

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 這個題如果是累加計算提交會顯示超時,所以最好的方法...