入門訓練4題
終於下定決心參加藍橋杯比賽,所以今天開始刷題,立下一個flag,2019年3月之前至少刷300道題官網上的題,因為報名費300元,這是最後一次參賽機會了,大三老學姐一定要拿個省獎。
入門訓練 Fibonacci數列
時間限制:1.0s 記憶體限制:256.0MB
問題描述
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。
#include<stdio.h> int a[1000001]; int main(){ int i,n; scanf("%d",&n); a[1]=1; a[2]=1; for( i=3;i<=n;i++){ a[i]=(a[i-1]+a[i-2])%10007; } printf("%d\n",a[n]); return 0; } //說來慚愧,第一題就不斷的顯示編譯錯誤,因為我用了c++風格來寫c,找了半天,才發現在藍橋杯的c編譯器 //裡要在開頭宣告所有變數。所以for(int i=3;i<=n;i++)是錯的 #include<stdio.h> int a[1000001]; int main(){ int i,n,f1=1,f2=1,f3=1; scanf("%d",&n); if(n>2) for( i=3;i<=n;i++){ f3=(f1+f2)%10007; f1=f2; f2=f3; } printf("%d\n",f3); return 0; }
入門訓練 圓的面積
時間限制:1.0s 記憶體限制:256.0MB
問題描述
給定圓的半徑r,求圓的面積。
輸入格式
輸入包含一個整數r,表示圓的半徑。
輸出格式
輸出一行,包含一個實數,四捨五入保留小數點後7位,表示圓的面積。
說明:在本題中,輸入是一個整數,但是輸出是一個實數。
對於實數輸出的問題,請一定看清楚實數輸出的要求,比如本題中要求保留小數點後7位,則你的程式必須嚴格的輸出7位小數,輸出過多或者過少的小數位數都是不行的,都會被認為錯誤。
實數輸出的問題如果沒有特別說明,舍入都是按四捨五入進行。
樣例輸入
4
樣例輸出
50.2654825
資料規模與約定
1 <= r <= 10000。
提示
本題對精度要求較高,請注意π的值應該取較精確的值。你可以使用常量來表示π,比如PI=3.14159265358979323,也可以使用數學公式來求π,比如PI=atan(1.0)*4。
#include<stdio.h>
#include<math.h>
int main(){
double PI=atan(1.0)*4;
int r;
scanf("%d",&r);
printf("%.7f\n",r*r*PI);
return 0;
}
//這一題裡我瞭解到了pi還可以通過函式準確定義
入門訓練 序列求和
時間限制:1.0s 記憶體限制:256.0MB
問題描述
求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型別的整數。
#include<stdio.h>
int main(){
long long n,sum;
scanf("%I64d",&n);
sum=(1+n)*n/2;
printf("%I64d\n",sum);
return 0;
}
//我以前習慣寫lld,但是發現一定要寫I64d,還有一時沒反應過來可以用公式求和
問題描述
輸入A、B,輸出A+B。
#include<stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
return 0;
}