1. 程式人生 > 實用技巧 >2019年 第10屆 藍橋杯 Java B組 省賽 第三題

2019年 第10屆 藍橋杯 Java B組 省賽 第三題

03-試題 C: 數列求值

本題總分:10 分

【問題描述】

給定數列 1, 1, 1, 3, 5, 9, 17, …,從第 4 項開始,每項都是前 3 項的和。求第 20190324 項的最後 4 位數字。

【答案提交】

這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為一個 4 位整數(提示:答案的千位不為 0),在提交答案時只填寫這個整數,填寫多餘的內容將無法得分。

【答案】:4659

package provincialGames_10_2019;
 
public class C數列求值 {  //4659
 
    public static void main(String[] args) {
// int a[] = new int[20190324]; // a[0] = a[1] = a[2] = 1; // for(int i = 3; i < 20190324; i++) { // a[i] = (a[i-1] + a[i-2] + a[i-3]) % 10000; // } // System.out.println(a[20190323]); int arr[] = new int[20190325]; arr[1] = arr[2] = arr[3] = 1;
for(int i = 4; i <= 20190324; i++){ arr[i] = (arr[i-1] + arr[i-2] + arr[i-3]); // % 10000 arr[i] %= 10000; } System.out.println(arr[20190324]); // int a = 1, b = 1, c = 1; // int n = 20190324; // while(--n > 0) { // int d = (a + b + c) % 10000;
// a = b; // b = c; // c = d; // } // System.out.println(a); // int a = 1, b = 1, c = 1; // for (int i = 4; i <= 20190324; i++) { // int d = (a + b + c) % 10000; //巧用模運算 // a = b; // b = c; // c = d; // } // 20190324%3 == 0 , 6730108*3 == 20190324 // System.out.println(c); } } /* 此題類似於斐波那契數列,但是所求20190324項的最後四位數字,要是單純按照斐波那契數列的思想求下去, 別說long型別,BigInteger型別都存不了這麼大的數,然後我們發現,所求20190324項的最後四位數字 (也就是變相的告訴我們運算過程只和每個數的後四位有關係),那麼我們只需要保留每次運算結果的後四位就OK了,這樣絕對不會溢位。 */