藍橋杯練習系統習題解答-入門訓練
學習網站推薦:
題目搜索方式:Ctrl+F—-> 輸入題目名稱—>定位到解答。
BEGIN-1 A+B問題
問題描述
輸入A、B,輸出A+B。
說明:在“問題描述”這部分,會給出試題的意思,以及所要求的目標。
輸入格式
輸入的第一行包括兩個整數,由空格分隔,分別表示A、B。
說明:“輸入格式”是描述在測試你的程序時,所給的輸入一定滿足的格式。
做題時你應該假設所給的輸入是一定滿足輸入格式的要求的,所以你不需要對輸入的格式進行檢查。多餘的格式檢查可能會適得其反,使用你的程序錯誤。
在測試的時候,系統會自動將輸入數據輸入到你的程序中,你不能給任何提示。比如,你在輸入的時候提示“請輸入A、B”之類的話是不需要的,這些多餘的輸出會使得你的程序被判定爲錯誤。
輸出格式
輸出一行,包括一個整數,表示A+B的值。
說明:“輸出格式”是要求你的程序在輸出結果的時候必須滿足的格式。
在輸出時,你的程序必須滿足這個格式的要求,不能少任何內容,也不能多任何內容。如果你的內容和輸出格式要求的不一樣,你的程序會被判斷爲錯誤,包括你輸出了提示信息、中間調試信息、計時或者統計的信息等。
樣例輸入
12 45
說明:“樣例輸入”給出了一組滿足“輸入格式”要求的輸入的例子。
這裏給出的輸入只是可能用來測試你的程序的一個輸入,在測試的時候,還會有更多的輸入用來測試你的程序。
樣例輸出
57
說明:“樣例輸出”給出了一組滿足“輸出格式”要求的輸出的例子。
樣例輸出中的結果是和樣例輸入中的是對應的,因此,你可以使用樣例的輸入輸出簡單的檢查你的程序。
要特別指出的是,能夠通過樣例輸入輸出的程序並不一定是正確的程序,在測試的時候,會用很多組數據進行測試,而不侷限於樣例數據。有可能一個程序通過了樣例數據,但測試的時候仍只能得0分,可能因爲這個程序只在一些類似樣例的特例中正確,而不具有通用性,再測試更多數據時會出現錯誤。
比如,對於本題,如果你寫一個程序不管輸入是什麼都輸入57,則樣例數據是對的,但是測試其他數據,哪怕輸入是1和2,這個程序也輸出57,則對於其他數據這個程序都不正確。
數據規模與約定
-10000 <= A, B <= 10000。
說明:“數據規模與約定”中給出了試題中主要參數的範圍。
這個範圍對於解題非常重要,不同的數據範圍會導致試題需要使用不同的解法來解決。比如本題中給的A、B範圍不大,可以使用整型(int)來保存,如果範圍更大,超過int的範圍,則要考慮其他方法來保存大數。
有一些範圍在方便的時候是在“問題描述”中直接給的,所以在做題時不僅要看這個範圍,還要注意問題描述。
本題的C源代碼如下:
#include <stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a+b);
return 0;
}
BEGIN-2 序列求和
問題描述
求1+2+3+…+n的值。
輸入格式
輸入包括一個整數n。
輸出格式
輸出一行,包括一個整數,表示1+2+3+…+n的值。
樣例輸入
4
樣例輸出
10
樣例輸入
100
說明:有一些試題會給出多組樣例輸入輸出以幫助你更好的做題。
一般在提交之前所有這些樣例都需要測試通過才行,但這不代表這幾組樣例數據都正確了你的程序就是完全正確的,潛在的錯誤可能仍然導致你的得分較低。
樣例輸出
5050
數據規模與約定
1 <= n <= 1,000,000,000。
說明:請注意這裏的數據規模。
本題直接的想法是直接使用一個循環來累加,然而,當數據規模很大時,這種“暴力”的方法往往會導致超時。此時你需要想想其他方法。你可以試一試,如果使用1000000000作爲你的程序的輸入,你的程序是不是能在規定的上面規定的時限內運行出來。
本題另一個要值得注意的地方是答案的大小不在你的語言默認的整型(int)範圍內,如果使用整型來保存結果,會導致結果錯誤。
如果你使用C++或C語言而且準備使用printf輸出結果,則你的格式字符串應該寫成%I64d以輸出long long類型的整數。
本題的C源代碼如下:
#include<stdio.h>
int main()
{
long long n,s=0;
scanf("%I64d",&n);
s=(1+n)*n/2;
printf("%I64d",s);
return 0;
}
BEGIN-3 圓的面積
問題描述
給定圓的半徑r,求圓的面積。
輸入格式
輸入包含一個整數r,表示圓的半徑。
輸出格式
輸出一行,包含一個實數,四捨五入保留小數點後7位,表示圓的面積。
說明:在本題中,輸入是一個整數,但是輸出是一個實數。
對於實數輸出的問題,請一定看清楚實數輸出的要求,比如本題中要求保留小數點後7位,則你的程序必須嚴格的輸出7位小數,輸出過多或者過少的小數位數都是不行的,都會被認爲錯誤。
實數輸出的問題如果沒有特別說明,舍入都是按四捨五入進行。
樣例輸入
4
樣例輸出
50.2654825
數據規模與約定
1 <= r <= 10000。
提示
本題對精度要求較高,請注意π的值應該取較精確的值。你可以使用常量來表示π,比如PI=3.14159265358979323,也可以使用數學公式來求π,比如PI=atan(1.0)*4。
本題的C源代碼如下:
#include <stdio.h>
#include <math.h>
#define PI atan(1.0)*4
main()
{
int r=0;
double s=0;
scanf("%d",&r);
s=PI*r*r;
printf("%.7f",s);
return 0;
}
BEGIN-4 Fibonacci數列
問題描述
Fibonacci數列的遞推公式爲:Fn=Fn-1+Fn-2,其中F1=F2=1。
當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。
輸入格式
輸入包含一個整數n。
輸出格式
輸出一行,包含一個整數,表示Fn除以10007的餘數。
說明:在本題中,答案是要求Fn除以10007的餘數,因此我們只要能算出這個餘數即可,而不需要先計算出Fn的準確值,再將計算的結果除以10007取餘數,直接計算餘數往往比先算出原數再取餘簡單。
樣例輸入
10
樣例輸出
55
樣例輸入
22
樣例輸出
7704
數據規模與約定
1 <= n <= 1,000,000。
本題的C源代碼如下:
#include <stdlib.h>
#include <stdio.h>
#define MOD 10007
#define MAXN 1000001
int n, i, F[MAXN];
int main()
{
scanf("%d", &n);
F[1] = 1;
F[2] = 1;
for (i = 3; i <= n; ++i)
F[i] = (F[i-1] + F[i-2]) % MOD;
printf("%d\n", F[n]);
return 0;
}