第五届蓝桥杯省赛javaB组试题解析
生活随笔
收集整理的這篇文章主要介紹了
第五届蓝桥杯省赛javaB组试题解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 武功秘籍小明到X山洞探險(xiǎn),撿到一本有破損的武功秘籍(2000多頁!當(dāng)然是偽造的)。他注意到:書的第10頁和第11頁在同一張紙上,但第11頁和第12頁不在同一張紙上。小明只想練習(xí)該書的第81頁到第92頁的武功,又不想帶著整本書。請(qǐng)問他至少要撕下多少張紙帶走?這是個(gè)整數(shù),請(qǐng)通過瀏覽器提交該數(shù)字,不要填寫任何多余的內(nèi)容。
7
2、切面條一根高筋拉面,中間切一刀,可以得到2根面條。如果先對(duì)折1次,中間切一刀,可以得到3根面條。如果連續(xù)對(duì)折2次,中間切一刀,可以得到5根面條。那么,連續(xù)對(duì)折10次,中間切一刀,會(huì)得到多少面條呢?答案是個(gè)整數(shù),請(qǐng)通過瀏覽器提交答案。不要填寫任何多余的內(nèi)容。2^10 + 1 = 1025
3 猜字母把a(bǔ)bcd...s共19個(gè)字母組成的序列重復(fù)拼接106次,得到長(zhǎng)度為2014的串。接下來刪除第1個(gè)字母(即開頭的字母a),以及第3個(gè),第5個(gè)等所有奇數(shù)位置的字母。得到的新串再進(jìn)行刪除奇數(shù)位置字母的動(dòng)作。如此下去,最后只剩下一個(gè)字母,請(qǐng)寫出該字母。答案是一個(gè)小寫字母,請(qǐng)通過瀏覽器提交答案。不要填寫任何多余的內(nèi)容。q package com.sihai.wujie;public class _03 {public static void main(String[] args) {StringBuffer sb = new StringBuffer("abcdefghigklmnopqrs");for(int i = 1; i < 106; i++){sb.append("abcdefghigklmnopqrs");}String temp = sb.toString();System.out.println(temp.charAt(1));while(temp.length() != 1){String val = "";for(int i = 0; i < temp.length(); i++){if((i+1)%2 == 0){val += temp.charAt(i);}}temp = val;}System.out.println(temp);} } 4 大衍數(shù)列中國古代文獻(xiàn)中,曾記載過“大衍數(shù)列”, 主要用于解釋中國傳統(tǒng)文化中的太極衍生原理。它的前幾項(xiàng)是:0、2、4、8、12、18、24、32、40、50 ...其規(guī)律是:對(duì)偶數(shù)項(xiàng),是序號(hào)平方再除2,奇數(shù)項(xiàng),是序號(hào)平方減1再除2。以下的代碼打印出了大衍數(shù)列的前 100 項(xiàng)。for(int i=1; i<100; i++) {if(________________) //填空System.out.println(i*i/2);elseSystem.out.println((i*i-1)/2); }請(qǐng)?zhí)顚憚澗€部分缺失的代碼。通過瀏覽器提交答案。注意:不要填寫題面已有的內(nèi)容,也不要填寫任何說明、解釋文字。i % 2 == 0
5 圓周率數(shù)學(xué)發(fā)展歷史上,圓周率的計(jì)算曾有許多有趣甚至是傳奇的故事。其中許多方法都涉及無窮級(jí)數(shù)。圖1.png中所示,就是一種用連分?jǐn)?shù)的形式表示的圓周率求法。下面的程序?qū)崿F(xiàn)了該求解方法。實(shí)際上數(shù)列的收斂對(duì)x的初始值 并不敏感。 結(jié)果打印出圓周率近似值(保留小數(shù)點(diǎn)后4位,并不一定與圓周率真值吻合)。double x = 111; for(int n = 10000; n>=0; n--){int i = 2 * n + 1;x = 2 + (i*i / x);}System.out.println(String.format("%.4f", ______________));4 / (x - 1)
6 奇怪的分式上小學(xué)的時(shí)候,小明經(jīng)常自己發(fā)明新算法。一次,老師出的題目是:1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (參見圖1.png)老師剛想批評(píng)他,轉(zhuǎn)念一想,這個(gè)答案湊巧也對(duì)啊,真是見鬼!對(duì)于分子、分母都是 1~9 中的一位數(shù)的情況,還有哪些算式可以這樣計(jì)算呢?請(qǐng)寫出所有不同算式的個(gè)數(shù)(包括題中舉例的)。顯然,交換分子分母后,例如:4/1 乘以 5/8 是滿足要求的,這算做不同的算式。但對(duì)于分子分母相同的情況,2/2 乘以 3/3 這樣的類型太多了,不在計(jì)數(shù)之列!注意:答案是個(gè)整數(shù)(考慮對(duì)稱性,肯定是偶數(shù))。請(qǐng)通過瀏覽器提交。不要書寫多余的內(nèi)容。14
package com.sihai.wujie;public class _06 {public static void main(String[] args) {int count = 0;for(int x = 1; x <= 9; x++){for(int y = 1; y <= 9; y++){if(x != y){for(int m = 1; m <= 9; m++){for(int n = 1; n <= 9; n++){if(m != n){ // double sum1 = (double)(n/m)*(y/x); // double sum2 = (double)(n*10 + y)/(m*10 + x);double sum1 = (double) y / x * n / m;double sum2 = (double) (y * 10 + n)/ (x * 10 + m);if(sum1 == sum2){count++;}}}}}}}System.out.println(count);}/*public static void main(String[] args) {int count = 0;for (int a = 1; a <= 9; a++) {for (int b = 1; b <= 9; b++) {if (a != b) {for (int c = 1; c <= 9; c++) {for (int d = 1; d <= 9; d++) {if (c != d) {double sum1 = (double) b / a * d / c;double sum2 = (double) (b * 10 + d)/ (a * 10 + c);if (sum1 == sum2) {count++;}}}}}}System.out.println(count);// 輸出結(jié)果:14}}*/ } 7 撲克序列A A 2 2 3 3 4 4, 一共4對(duì)撲克牌。請(qǐng)你把它們排成一行。要求:兩個(gè)A中間有1張牌,兩個(gè)2之間有2張牌,兩個(gè)3之間有3張牌,兩個(gè)4之間有4張牌。請(qǐng)?zhí)顚懗鏊蟹弦蟮呐帕兄?#xff0c;字典序最小的那個(gè)。例如:22AA3344 比 A2A23344 字典序小。當(dāng)然,它們都不是滿足要求的答案。請(qǐng)通過瀏覽器提交答案。“A”一定不要用小寫字母a,也不要用“1”代替。字符間一定不要留空格。2342A3A4
public class Main {public static String result = "AAAAAAAA";public void swap(char[] A, int a, int b) {char temp = A[a];A[a] = A[b];A[b] = temp;}public void dfs(char[] arrayA, int step) {if(step == arrayA.length) {getResult(arrayA);return;} else {for(int i = step;i < arrayA.length;i++) {swap(arrayA, i, step);dfs(arrayA, step + 1);swap(arrayA, i, step);}}return;}public int getSub(char[] arrayA, char temp) {int a1 = 0, a2 = 0;int i = 0;for(;i < arrayA.length;i++) {if(arrayA[i] == temp) {a1 = i;break;}}i++;for(;i < arrayA.length;i++) {if(arrayA[i] == temp) {a2 = i;break;}}return (a2 - a1);}public void getResult(char[] arrayA) {char temp1 = 'A', temp2 = '2', temp3 = '3', temp4 = '4';boolean judge = false;int a = getSub(arrayA, temp1);int b = getSub(arrayA, temp2);int c = getSub(arrayA, temp3);int d = getSub(arrayA, temp4);if(a == 2 && b == 3 && c == 4 && d == 5)judge = true;if(judge == false)return;String A = "";for(int i = 0;i < arrayA.length;i++)A += arrayA[i];if(result.compareTo(A) > 0)result = A;return;}public static void main(String[] args) {Main test = new Main();String A = "AA223344";char[] arrayA = A.toCharArray();test.dfs(arrayA, 0);System.out.println(result);} } 8 分糖果有n個(gè)小朋友圍坐成一圈。老師給每個(gè)小朋友隨機(jī)發(fā)偶數(shù)個(gè)糖果,然后進(jìn)行下面的游戲:每個(gè)小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖后,擁有奇數(shù)顆糖的孩子由老師補(bǔ)給1個(gè)糖果,從而變成偶數(shù)。反復(fù)進(jìn)行這個(gè)游戲,直到所有小朋友的糖果數(shù)都相同為止。你的任務(wù)是預(yù)測(cè)在已知的初始糖果情形下,老師一共需要補(bǔ)發(fā)多少個(gè)糖果。【格式要求】程序首先讀入一個(gè)整數(shù)N(2<N<100),表示小朋友的人數(shù)。接著是一行用空格分開的N個(gè)偶數(shù)(每個(gè)偶數(shù)不大于1000,不小于2)要求程序輸出一個(gè)整數(shù),表示老師需要補(bǔ)發(fā)的糖果數(shù)。例如:輸入 3 2 2 4 程序應(yīng)該輸出: 4資源約定: 峰值內(nèi)存消耗(含虛擬機(jī)) < 256M CPU消耗 < 1000ms請(qǐng)嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請(qǐng)您輸入...” 的多余內(nèi)容。所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。 注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。 注意:主類的名字必須是:Main,否則按無效代碼處理。 import java.util.Scanner;public class Main {public static long count = 0;public boolean judge(int[] A) {for(int i = 1;i < A.length;i++) {if(A[i - 1] == A[i])continue;elsereturn false;}return true;}public void getResult(int[] A) {int[] tempA = new int[A.length];while(true) {for(int i = 0;i < A.length;i++)tempA[i] = A[i] / 2;A[0] = A[0] - tempA[0] + tempA[A.length - 1];for(int i = 1;i < A.length;i++)A[i] = A[i] - tempA[i] + tempA[i - 1];for(int i = 0;i < A.length;i++) {if(A[i] % 2 == 1) {count++;A[i] += 1;}}if(judge(A) == true)break;}System.out.println(count);return;}public static void main(String[] args) {Main test = new Main();Scanner in = new Scanner(System.in);int n = in.nextInt();int[] A = new int[n];for(int i = 0;i < n;i++)A[i] = in.nextInt();test.getResult(A);} } 9 地宮取寶X 國王有一個(gè)地宮寶庫。是 n x m 個(gè)格子的矩陣。每個(gè)格子放一件寶貝。每個(gè)寶貝貼著價(jià)值標(biāo)簽。地宮的入口在左上角,出口在右下角。小明被帶到地宮的入口,國王要求他只能向右或向下行走。走過某個(gè)格子時(shí),如果那個(gè)格子中的寶貝價(jià)值比小明手中任意寶貝價(jià)值都大,小明就可以拿起它(當(dāng)然,也可以不拿)。當(dāng)小明走到出口時(shí),如果他手中的寶貝恰好是k件,則這些寶貝就可以送給小明。請(qǐng)你幫小明算一算,在給定的局面下,他有多少種不同的行動(dòng)方案能獲得這k件寶貝。【數(shù)據(jù)格式】輸入一行3個(gè)整數(shù),用空格分開:n m k (1<=n,m<=50, 1<=k<=12)接下來有 n 行數(shù)據(jù),每行有 m 個(gè)整數(shù) Ci (0<=Ci<=12)代表這個(gè)格子上的寶物的價(jià)值要求輸出一個(gè)整數(shù),表示正好取k個(gè)寶貝的行動(dòng)方案數(shù)。該數(shù)字可能很大,輸出它對(duì) 1000000007 取模的結(jié)果。例如,輸入: 2 2 2 1 2 2 1 程序應(yīng)該輸出: 2再例如,輸入: 2 3 2 1 2 3 2 1 5 程序應(yīng)該輸出: 14資源約定: 峰值內(nèi)存消耗(含虛擬機(jī)) < 256M CPU消耗 < 2000ms請(qǐng)嚴(yán)格按要求輸出,不要畫蛇添足地打印類似:“請(qǐng)您輸入...” 的多余內(nèi)容。所有代碼放在同一個(gè)源文件中,調(diào)試通過后,拷貝提交該源碼。 注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。 注意:主類的名字必須是:Main,否則按無效代碼處理。 import java.util.ArrayList; import java.util.Scanner;public class Main {public static long count = 0;public static int[][] move = {{0,1},{1,0}}; //表示分別向右、下移動(dòng)一步static class point {public int x;public int y;public ArrayList<Integer> list;point(int x, int y, ArrayList<Integer> list) {this.x = x;this.y = y;this.list = list;}}//獲取C(n , m)值public long getCnm(int n, int m) {if(m == 0 || n == m)return 1;long result = 0;long temp1 = 1, temp2 = 1;for(int i = 0;i < m;i++)temp1 *= (n - i);for(int i = 1;i <= m;i++)temp2 *= i;result = temp1 / temp2;return result;}public boolean check(int[][] A, int x, int y) {if(x > A.length - 1 || y > A[0].length - 1)return false;return true;}public void bfs(int[][] A, int x, int y, int k) {ArrayList<point> list = new ArrayList<point>();ArrayList<Integer> listV = new ArrayList<Integer>();listV.add(A[x][y]);list.add(new point(x, y, listV));while(list.size() > 0) {point temp = list.get(0);int tempX = temp.x;int tempY = temp.y;ArrayList<Integer> templistV = temp.list;list.remove(0);if(tempX == A.length - 1 && tempY == A[0].length - 1) {getResult(templistV, k);continue;}for(int i = 0;i < 2;i++) {int tempX1 = tempX + move[i][0];int tempY1 = tempY + move[i][1];if(check(A, tempX1, tempY1)) {ArrayList<Integer> templistV1 = new ArrayList<Integer>();for(int j = 0;j < templistV.size();j++)templistV1.add(templistV.get(j));templistV1.add(A[tempX1][tempY1]);list.add(new point(tempX1, tempY1, templistV1));}}}}public void getResult(ArrayList<Integer> listV, int k) {int len = listV.size();for(int i = 0;i <= len - k;i++) {int n = 1;for(int j = i + 1;j < len;j++) {if(listV.get(j) > listV.get(i))n++;}if(n >= k) {//此處使用n-1,k-1。是因?yàn)楫?dāng)?shù)趇個(gè)元素必須要選擇count = (count + getCnm(n - 1, k - 1)) % 1000000007;}}return;}public static void main(String[] args) {Main test = new Main();Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int k = in.nextInt();int[][] A = new int[n][m];for(int i = 0;i < n;i++)for(int j = 0;j < m;j++)A[i][j] = in.nextInt();test.bfs(A, 0, 0, k);System.out.println(count);} }總結(jié)
以上是生活随笔為你收集整理的第五届蓝桥杯省赛javaB组试题解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第六届蓝桥杯省赛javaB组真题及答案
- 下一篇: 第四届蓝桥杯省赛javaB组试题解析