1. 程式人生 > >藍橋杯Java基礎練習

藍橋杯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);
    }
}