2017年第八屆藍橋杯省賽試題(JavaA組)


1.結果填空 (滿分5分)
2.結果填空 (滿分11分)
3.結果填空 (滿分13分)
4.結果填空 (滿分17分)
5.代碼填空 (滿分7分)
6.代碼填空 (滿分9分)
7.程序設計(滿分19分)
8.程序設計(滿分21分)
9.程序設計(滿分23分)
10.程序設計(滿分25分)
 


1.標題:迷宮

X星球的一處迷宮游樂場建在某個小山坡上。
它是由10x10相互連通的小房間組成的。

房間的地板上寫着一個很大的字母。
我們假設玩家是面朝上坡的方向站立,則:
L表示走到左邊的房間,
R表示走到右邊的房間,
U表示走到上坡方向的房間,
D表示走到下坡方向的房間。

X星球的居民有點懶,不願意費力思考。
他們更喜歡玩運氣類的游戲。這個游戲也是如此!

開始的時候,直升機把100名玩家放入一個個小房間內。
玩家一定要按照地上的字母移動。

迷宮地圖如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------

請你計算一下,最后,有多少玩家會走出迷宮? 
而不是在里邊兜圈子。

請提交該整數,表示走出迷宮的玩家數目,不要填寫任何多余的內容。

如果你還沒明白游戲規則,可以參看一個簡化的4x4迷宮的解說圖:
p1.png

 

 

2.標題:9數算式

觀察如下的算式:

9213 x 85674 = 789314562

左邊的乘數和被乘數正好用到了1~9的所有數字,每個1次。
而乘積恰好也是用到了1~9的所有數字,並且每個1次。

請你借助計算機的強大計算能力,找出滿足如上要求的9數算式一共有多少個?

注意:
1. 總數目包含題目給出的那個示例。
2. 乘數和被乘數交換后作為同一方案來看待。

 

3.標題:魔方狀態

二階魔方就是只有2層的魔方,只由8個小塊組成。
如圖p1.png所示。

小明很淘氣,他只喜歡3種顏色,所有把家里的二階魔方重新塗了顏色,如下:

前面:橙色
右面:綠色
上面:黃色
左面:綠色
下面:橙色
后面:黃色

請你計算一下,這樣的魔方被打亂后,一共有多少種不同的狀態。

如果兩個狀態經過魔方的整體旋轉后,各個面的顏色都一致,則認為是同一狀態。

請提交表示狀態數的整數,不要填寫任何多余內容或說明文字。

 

4.標題:方格分割

6x6的方格,沿着格子的邊線剪開成兩部分。
要求這兩部分的形狀完全相同。

如圖:p1.png, p2.png, p3.png 就是可行的分割法。

試計算:
包括這3種分法在內,一共有多少種不同的分割方法。
注意:旋轉對稱的屬於同一種分割法。

請提交該整數,不要填寫任何多余的內容或說明文字。

 

 

5.標題:字母組串

由 A,B,C 這3個字母就可以組成許多串。
比如:"A","AB","ABC","ABA","AACBB" ....

現在,小明正在思考一個問題:
如果每個字母的個數有限定,能組成多少個已知長度的串呢?

他請好朋友來幫忙,很快得到了代碼,
解決方案超級簡單,然而最重要的部分卻語焉不詳。

請仔細分析源碼,填寫划線部分缺少的內容。

public class A
{
    // a個A,b個B,c個C 字母,能組成多少個不同的長度為n的串。
    static int f(int a, int b, int c, int n)
    {
        if(a<0 || b<0 || c<0) return 0;
        if(n==0) return 1; 
        
        return ________________________________;  //填空
    }
    
    public static void main(String[] args)
    {
        System.out.println(f(1,1,1,2));
        System.out.println(f(1,2,3,3));
    }
}

對於上面的測試數據,小明口算的結果應該是:
6
19


注意:只填寫划線部分缺少的代碼,不要提交任何多余內容或說明性文字。

 

 

6.標題:最大公共子串

最大公共子串長度問題就是:
求兩個串的所有子串中能夠匹配上的最大長度是多少。

比如:"abcdkkk" 和 "baabcdadabc",
可以找到的最長的公共子串是"abcd",所以最大公共子串長度為4。

下面的程序是采用矩陣法進行求解的,這對串的規模不大的情況還是比較有效的解法。

請分析該解法的思路,並補全划線部分缺失的代碼。

public class Main
{
    static int f(String s1, String s2)
    {
        char[] c1 = s1.toCharArray();
        char[] c2 = s2.toCharArray();
        
        int[][] a = new int[c1.length+1][c2.length+1];
        
        int max = 0;
        for(int i=1; i<a.length; i++){
            for(int j=1; j<a[i].length; j++){
                if(c1[i-1]==c2[j-1]) {
                    a[i][j] = __________________;  //填空 
                    if(a[i][j] > max) max = a[i][j];
                }
            }
        }
        
        return max;
    }
    
    public static void main(String[] args){
        int n = f("abcdkkk", "baabcdadabc");
        System.out.println(n);
    }
}

注意:只提交缺少的代碼,不要提交已有的代碼和符號。也不要提交說明性文字。

 

 

7.描述:正則問題

考慮一種簡單的正則表達式:
只由 x ( ) | 組成的正則表達式。
小明想求出這個正則表達式能接受的最長字符串的長度。  

例如 ((xx|xxx)x|(x|xx))xx 能接受的最長字符串是: xxxxxx,長度是6。

輸入
----
一個由x()|組成的正則表達式。輸入長度不超過100,保證合法。  

輸出
----
這個正則表達式能接受的最長字符串的長度。  

例如,
輸入:
((xx|xxx)x|(x|xx))xx  

程序應該輸出:
6  

資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗  < 1000ms


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

所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
不要使用package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:Main,否則按無效代碼處理。

 

 

8.標題:包子湊數

小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有N種蒸籠,其中第i種蒸籠恰好能放Ai個包子。每種蒸籠都有非常多籠,可以認為是無限籠。

每當有顧客想買X個包子,賣包子的大叔就會迅速選出若干籠包子來,使得這若干籠中恰好一共有X個包子。比如一共有3種蒸籠,分別能放3、4和5個包子。當顧客想買11個包子時,大叔就會選2籠3個的再加1籠5個的(也可能選出1籠3個的再加2籠4個的)。

當然有時包子大叔無論如何也湊不出顧客想買的數量。比如一共有3種蒸籠,分別能放4、5和6個包子。而顧客想買7個包子時,大叔就湊不出來了。

小明想知道一共有多少種數目是包子大叔湊不出來的。

輸入
----
第一行包含一個整數N。(1 <= N <= 100)
以下N行每行包含一個整數Ai。(1 <= Ai <= 100)  

輸出
----
一個整數代表答案。如果湊不出的數目有無限多個,輸出INF。

例如,
輸入:
2  
4  
5   

程序應該輸出:
6  

再例如,
輸入:
2  
4  
6    

程序應該輸出:
INF

樣例解釋:
對於樣例1,湊不出的數目包括:1, 2, 3, 6, 7, 11。  
對於樣例2,所有奇數都湊不出來,所以有無限多個。  

資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗  < 1000ms


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

所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
不要使用package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:Main,否則按無效代碼處理。
提交程序時,注意選擇所期望的語言類型和編譯器類型。

 

9.標題: 分巧克力

    兒童節那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。
    小明一共有N塊巧克力,其中第i塊是Hi x Wi的方格組成的長方形。

    為了公平起見,小明需要從這 N 塊巧克力中切出K塊巧克力分給小朋友們。切出的巧克力需要滿足:

    1. 形狀是正方形,邊長是整數  
    2. 大小相同  

例如一塊6x5的巧克力可以切出6塊2x2的巧克力或者2塊3x3的巧克力。

當然小朋友們都希望得到的巧克力盡可能大,你能幫小Hi計算出最大的邊長是多少么?

輸入
第一行包含兩個整數N和K。(1 <= N, K <= 100000)  
以下N行每行包含兩個整數Hi和Wi。(1 <= Hi, Wi <= 100000) 
輸入保證每位小朋友至少能獲得一塊1x1的巧克力。   

輸出
輸出切出的正方形巧克力最大可能的邊長。

樣例輸入:
2 10  
6 5  
5 6  

樣例輸出:
2

資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗  < 1000ms


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

所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
不要使用package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:Main,否則按無效代碼處理。

 

10.標題:油漆面積

X星球的一批考古機器人正在一片廢墟上考古。
該區域的地面堅硬如石、平整如鏡。
管理人員為方便,建立了標准的直角坐標系。

每個機器人都各有特長、身懷絕技。它們感興趣的內容也不相同。
經過各種測量,每個機器人都會報告一個或多個矩形區域,作為優先考古的區域。

矩形的表示格式為(x1,y1,x2,y2),代表矩形的兩個對角點坐標。

為了醒目,總部要求對所有機器人選中的矩形區域塗黃色油漆。
小明並不需要當油漆工,只是他需要計算一下,一共要耗費多少油漆。

其實這也不難,只要算出所有矩形覆蓋的區域一共有多大面積就可以了。
注意,各個矩形間可能重疊。

本題的輸入為若干矩形,要求輸出其覆蓋的總面積。

輸入格式:
第一行,一個整數n,表示有多少個矩形(1<=n<10000)
接下來的n行,每行有4個整數x1 y1 x2 y2,空格分開,表示矩形的兩個對角頂點坐標。
(0<= x1,y1,x2,y2 <=10000)

輸出格式:
一行一個整數,表示矩形覆蓋的總面積。

例如,
輸入:
3
1 5 10 10
3 1 20 20
2 7 15 17

程序應該輸出:
340

再例如,
輸入:
3
5 2 10 6
2 7 12 10
8 1 15 15

程序應該輸出:
128

資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗  < 2000ms


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

所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。
不要使用package語句。不要使用jdk1.7及以上版本的特性。
主類的名字必須是:Main,否則按無效代碼處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM