藍橋杯Java基礎練習
最近有在看一些小演算法,於是看到了藍橋杯,覺得藍橋杯的測試系統還是蠻有意思的,就把裡面的題目做了一遍,在此做下筆記
1.Fibonacci數列
問題描述
Fibonacci數列的遞推公式為:Fn=Fn-1+Fn-2,其中F1=F2=1。
當n比較大時,Fn也非常大,現在我們想知道,Fn除以10007的餘數是多少。
輸入格式
輸入包含一個整數n。
輸出格式
輸出一行,包含一個整數,表示Fn除以10007的餘數。
首先關於藍橋杯,需要注意的點是:
1. 類名必須為Main(首字母要大寫)
2. 語法一定要正確
3. 除了題目的要求,不可以有其餘冗餘的程式碼輸出
上面的題目要求是獲取使用者輸入的一個整數,並求這個整數對應的Fn%10007的餘數
1.關注點是輸出的資料是:
Fn%10007的餘數,所以不需要輸出每一個數,也就是說不需要使用遞迴函式,一個簡單的迴圈就可以實現
2.原始碼如下(通過測試)
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int a = 1, b = 1, result = 1,n=scanner.nextInt(); //獲取使用者輸入
for (int i = 1 ; i <= n- 2; i++) { //此判斷相當於n>2的時候執行程式碼塊
result = (a + b) % 10007; //求出每個數取餘的結果
a = b; //變化相應的數值
b = result;
}
System.out.println(result);
}
}
2.實數輸出
問題描述
給定圓的半徑r,求圓的面積。
輸入格式
輸入包含一個整數r,表示圓的半徑。
輸出格式
輸出一行,包含一個實數,四捨五入保留小數點後7位,表示圓的面積。
由於Java中有許多內建的函式,所以這些基礎的題型,我們都可以使用內建函式去實現,需要用到的函式有 求圓的半徑π*r*r
π
,我們可以使用 Math.PI*r*r
,格式化數字可以使用DecimalFormat
中的format()
函式,於是,簡單的三行程式碼就可以實現了import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int r = new Scanner(System.in).nextInt(); //獲取使用者輸入
String result = new DecimalFormat("#.0000000").format(Math.PI*r*r);
System.out.println(result); //輸出圓的面積
}
}
3.求和公式
問題描述
求1+2+3+...+n的值。
輸入格式
輸入包括一個整數n。
輸出格式
輸出一行,包括一個整數,表示1+2+3+...+n的值。
這個題目看起來十分簡單,但是需要注意的細節還是不可以忽略,數的累加需要我們注意儲存累加結果的型別值,如果是int
或者long
這些有限制的範圍的型別值的話,是會有執行錯誤的,沒有遇到只能說你的數值不夠大,所以在此,建議使用BigInteger
這個型別,來儲存相應的數值,根據我們之前的數學知識,連續自然數的累加我們可以使用公式n*(n+1)/2
於是我們就可以使用Java中的multiply()
數值相乘函式和divide()
數值相除函式
於是就有了以下原始碼
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
BigInteger n,i = BigInteger.valueOf(1),j = BigInteger.valueOf(2);
n = input.nextBigInteger();
System.out.println((n.add(i)).multiply(n).divide(j));
}
}
以上程式碼還可以做相應的簡化
BigInteger n=new Scanner(System.in).nextBigInteger(),
i = BigInteger.valueOf(1),
j = BigInteger.valueOf(2);
System.out.println((n.add(i)).multiply(n).divide(j));
於是兩行程式碼就可以實現數值的求和,所以說,熟悉Java的API是件很給力的事情
4.A+B問題
問題描述
輸入A、B,輸出A+B。
輸入格式
輸入的第一行包括兩個整數,由空格分隔,分別表示A、B。
輸出格式
輸出一行,包括一個整數,表示A+B的值。
這一道題其實就是簡單的輸入輸出,沒有什麼難點,需要注意的是,我們其實是不需要關注輸入的格式的,也不要做相應的格式不正確的的處理,因為一切的輸出都是基於正確的輸入的基礎上的
原始碼如下
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(a+b);
}
}