天天看點

2014年第五屆藍橋杯省賽試題(JavaA組)

1.結果填空 (滿分2分)

2.結果填空 (滿分6分)

3.結果填空 (滿分7分)

4.代碼填空 (滿分4分)

5.代碼填空 (滿分12分)

6.結果填空 (滿分12分)

7.結果填空 (滿分9分)

8.程式設計(滿分8分)

9.程式設計(滿分17分)

10.程式設計(滿分23分)

1.标題:猜年齡

    小明帶兩個妹妹參加元宵燈會。别人問她們多大了,她們調皮地說:“我們倆的年齡之積是年齡之和的6倍”。小明又補充說:“她們可不是雙胞胎,年齡差肯定也不超過8歲啊。”

    請你寫出:小明的較小的妹妹的年齡。

注意: 隻寫一個人的年齡數字,請通過浏覽器送出答案。不要書寫任何多餘的内容。

2.标題:李白打酒

    話說大詩人李白,一生好飲。幸好他從不開車。

    一天,他提着酒壺,從家裡出來,酒壺中有酒2鬥。他邊走邊唱:

    無事街上走,提壺去打酒。

    逢店加一倍,遇花喝一鬥。

    這一路上,他一共遇到店5次,遇到花10次,已知最後一次遇到的是花,他正好把酒喝光了。 

    請你計算李白遇到店和花的次序,可以把遇店記為a,遇花記為b。則:babaabbabbabbbb 就是合理的次序。像這樣的答案一共有多少呢?請你計算出所有可能方案的個數(包含題目給出的)。

    注意:通過浏覽器送出答案。答案是個整數。不要書寫任何多餘的内容。

3.标題:神奇算式

    由4個不同的數字,組成的一個乘法算式,它們的乘積仍然由這4個數字組成。

    比如: 

210 x 6 = 1260 

8 x 473 = 3784

27 x 81 = 2187 

    都符合要求。

    如果滿足乘法交換律的算式算作同一種情況,那麼,包含上邊已列出的3種情況,一共有多少種滿足要求的算式。

    請填寫該數字,通過浏覽器送出答案,不要填寫多餘内容(例如:列出所有算式)。

4.标題:寫日志

    寫日志是程式的常見任務。現在要求在 t1.log, t2.log, t3.log 三個檔案間輪流寫入日志。也就是說第一次寫入t1.log,第二次寫入t2.log,... 第四次仍然寫入t1.log,如此反複。

    下面的代碼模拟了這種輪流寫入不同日志檔案的邏輯。

public class A
{
    private static int n = 1;
    
    public static void write(String msg)
    {
        String filename = "t" + n + ".log";
        n = ____________;
        System.out.println("write to file: " + filename + " " + msg);
    }
}      

    請填寫劃線部分缺失的代碼。通過浏覽器送出答案。

注意:不要填寫題面已有的内容,也不要填寫任何說明、解釋文字。

5.标題:錦标賽

   如果要在n個資料中挑選出第一大和第二大的資料(要求輸出資料所在位置和值),使用什麼方法比較的次數最少?我們可以從體育錦标賽中受到啟發。

   如圖【1.png】所示,8個選手的錦标賽,先兩兩捉對比拼,淘汰一半。優勝者再兩兩比拼...直到決出第一名。

   第一名輸出後,隻要對黃色标示的位置重新比賽即可。

   下面的代碼實作了這個算法(假設資料中沒有相同值)。

   代碼中需要用一個數組來表示圖中的樹(注意,這是個滿二叉樹, 不足需要補齊)。它不是存儲資料本身,而是存儲了資料的下标。   

   第一個資料輸出後,它所在的位置被辨別為-1

class A{
       //a 表示待處理的資料,長度如果不是2的次幂,則不足位置補為-1
    static void pick(int[] a)
    {
        int n = 1;
        while(n<a.length) n *= 2;
        
        
        int[] b = new int[2*n-1];
        for(int i=0; i<n; i++){ 
            if(i<a.length) 
                b[n-1+i] = i;
            else
                b[n-1+i] = -1;
        }
        
        //從最後一個向前處理
        for(int i=b.length-1; i>0; i-=2){
            if(b[i]<0){
                if(b[i-1]>=0)
                    b[(i-1)/2] = b[i-1]; 
                else
                    b[(i-1)/2] = -1;
            }
            else{
                if(a[b[i]]>a[b[i-1]])
                    b[(i-1)/2] = b[i];
                else
                    b[(i-1)/2] = b[i-1];
            }
        }
        
        //輸出樹根
        System.out.println(b[0] + ": " + a[b[0]]);
        
        //值等于根元素的位置需要重新pk
        pk(a,b,0,b[0]);
        
        //再次輸出樹根
        System.out.println(b[0] + ": " + a[b[0]]);
    }
 
    // a 表示待處理資料,b 二叉樹,k 目前要重新比拼的位置,v 已經決勝出的值    
       static void pk(int[] a, int[] b, int k, int v)
    {
        
        int k1 = k*2+1;
        int k2 = k1 + 1;
        
        if(k1>=b.length || k2>=b.length){
            b[k] = -1;
            return;
        }
        
        if(b[k1]==v) 
            pk(a,b,k1,v);
        else
            pk(a,b,k2,v);
        
        
        //重新比較
        if(b[k1]<0){
            if(b[k2]>=0)
                b[k] = b[k2]; 
            else
                b[k] = -1;
            return;
        }
        
        if(b[k2]<0){
            if(b[k1]>=0)
                b[k] = b[k1]; 
            else
                b[k] = -1;
            return;
        }
        
        if(__________________________)  //填空
            b[k] = b[k1];
        else
            b[k] = b[k2];
    }
}      

    請仔細分析流程,填寫缺失的代碼。

    通過浏覽器送出答案,隻填寫缺失的代碼,不要填寫已有代碼或其它說明語句等。

2014年第五屆藍橋杯省賽試題(JavaA組)

6.标題:六角填數

    如圖【1.png】所示六角形中,填入1~12的數字。

    使得每條直線上的數字之和都相同。

    圖中,已經替你填好了3個數字,請你計算星号位置所代表的數字是多少?

請通過浏覽器送出答案,不要填寫多餘的内容。

2014年第五屆藍橋杯省賽試題(JavaA組)

7.标題:繩圈

    今有 100 根繩子,當然會有 200 個繩頭。

    如果任意取繩頭兩兩配對,把所有繩頭都打結連接配接起來。最後會形成若幹個繩圈(不考慮是否套在一起)。

    我們的問題是:請計算最後将形成多少個繩圈的機率最大?

    注意:結果是一個整數,請通過浏覽器送出該數字。不要填寫多餘的内容。

8.标題:蘭頓螞蟻

    蘭頓螞蟻,是于1986年,由克裡斯·蘭頓提出來的,屬于細胞自動機的一種。

    平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一隻“螞蟻”。

    螞蟻的頭部朝向為:上下左右其中一方。

    螞蟻的移動規則十分簡單:

    若螞蟻在黑格,右轉90度,将該格改為白格,并向前移一格;

    若螞蟻在白格,左轉90度,将該格改為黑格,并向前移一格。

    規則雖然簡單,螞蟻的行為卻十分複雜。剛剛開始時留下的路線都會有接近對稱,像是會重複,但不論起始狀态如何,螞蟻經過漫長的混亂活動後,會開辟出一條規則的“高速公路”。

    螞蟻的路線是很難事先預測的。

    你的任務是根據初始狀态,用計算機模拟蘭頓螞蟻在第n步行走後所處的位置。

【資料格式】

輸入資料的第一行是 m n 兩個整數(3 < m, n < 100),表示正方形格子的行數和列數。

接下來是 m 行資料。

每行資料為 n 個被空格分開的數字。0 表示白格,1 表示黑格。

接下來是一行資料:x y s k, 其中x y為整數,表示螞蟻所在行号和列号(行号從上到下增長,列号從左到右增長,都是從0開始編号)。s 是一個大寫字母,表示螞蟻頭的朝向,我們約定:上下左右分别用:UDLR表示。k 表示螞蟻走的步數。

輸出資料為兩個空格分開的整數 p q, 分别表示螞蟻在k步後,所處格子的行号和列号。

例如, 輸入:

5 6

0 0 0 0 0 0

0 0 0 0 0 0

0 0 1 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

2 3 L 5

程式應該輸出:

1 3

再例如, 輸入:

3 3

0 0 0

1 1 1

1 1 1

1 1 U 6

程式應該輸出:

0 0

資源約定:

峰值記憶體消耗(含虛拟機) < 256M

CPU消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。

所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。

注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。

注意:主類的名字必須是:Main,否則按無效代碼處理。

2014年第五屆藍橋杯省賽試題(JavaA組)

9.标題:斐波那契

    斐波那契數列大家都非常熟悉。它的定義是:

    f(x) = 1                    .... (x=1,2)

    f(x) = f(x-1) + f(x-2)      .... (x>2)

    對于給定的整數 n 和 m,我們希望求出:

    f(1) + f(2) + ... + f(n)  的值。但這個值可能非常大,是以我們把它對 f(m) 取模。

    公式參見【圖1.png】

    但這個數字依然很大,是以需要再對 p 求模。

【資料格式】

輸入為一行用空格分開的整數 n m p (0 < n, m, p < 10^18)

輸出為1個整數

例如,如果輸入:

2 3 5

程式應該輸出:

再例如,輸入:

15 11 29

程式應該輸出:

25

資源約定:

峰值記憶體消耗(含虛拟機) < 256M

CPU消耗  < 2000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。

所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。

注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。

注意:主類的名字必須是:Main,否則按無效代碼處理。

2014年第五屆藍橋杯省賽試題(JavaA組)

10.标題:波動數列

    觀察這個數列:

    1 3 0 2 -1 1 -2 ...

    這個數列中後一項總是比前一項增加2或者減少3。

    棟棟對這種數列很好奇,他想知道長度為 n 和為 s 而且後一項總是比前一項增加a或者減少b的整數數列可能有多少種呢?

【資料格式】

    輸入的第一行包含四個整數 n s a b,含義如前面說述。

    輸出一行,包含一個整數,表示滿足條件的方案數。由于這個數很大,請輸出方案數除以100000007的餘數。

例如,輸入:

4 10 2 3

程式應該輸出:

2

【樣例說明】

這兩個數列分别是2 4 1 3和7 4 1 -2。

【資料規模與約定】

對于10%的資料,1<=n<=5,0<=s<=5,1<=a,b<=5;

對于30%的資料,1<=n<=30,0<=s<=30,1<=a,b<=30;

對于50%的資料,1<=n<=50,0<=s<=50,1<=a,b<=50;

對于70%的資料,1<=n<=100,0<=s<=500,1<=a, b<=50;

對于100%的資料,1<=n<=1000,-1,000,000,000<=s<=1,000,000,000,1<=a, b<=1,000,000。

資源約定:

峰值記憶體消耗(含虛拟機) < 256M

CPU消耗  < 2000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘内容。

所有代碼放在同一個源檔案中,調試通過後,拷貝送出該源碼。

注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。

注意:主類的名字必須是:Main,否則按無效代碼處理。