第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)
目錄
A、求和
B、矩形切割
C、不同子串
D、質數
E、最大降雨量
F、旋轉
G、外賣店優先級
H、人物相關性分析
I、等差數列
J、打掃機器人
A、求和
試題 A: 求和
本題總分:5 分
【問題描述】
小明對數位中含有 2、0、1、9 的數字很感興趣,在 1 到 40 中這樣的數包
括 1、2、9、10 至 32、39 和 40,共 28 個,他們的和是 574。
請問,在 1 到 2019 中,所有這樣的數的和是多少?
【答案提交】
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一
個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
題解:?
package action;public class demo {public static void main(String[] args) {int sum = 0;for (int i = 0; i <= 2019; i++) {// 將數字轉換為字符串String str = String.valueOf(i);if (str.contains("2") || str.contains("0") || str.contains("1") ||str.contains("9")) {sum += i;}}System.out.println(sum);} }B、矩形切割
試題 B: 矩形切割
本題總分:5 分
【問題描述】
小明有一些矩形的材料,他要從這些矩形材料中切割出一些正方形。
當他面對一塊矩形材料時,他總是從中間切割一刀,切出一塊最大的正方
形,剩下一塊矩形,然后再切割剩下的矩形材料,直到全部切為正方形為止。
例如,對于一塊兩邊分別為 5 和 3 的材料(記為 5 × 3),小明會依次切出
3 × 3、2 × 2、1 × 1、1 × 1 共 4 個正方形。
現在小明有一塊矩形的材料,兩邊長分別是 2019 和 324。請問小明最終會
切出多少個正方形?
【答案提交】
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一
個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
題解:
package action;public class demo {public static void main(String[] args) {int x = 2019;//目標數據int y = 324;System.out.println(f(x, y, 0));}public static int f(int x, int y, int count) {if (x == 0 || y == 0) {return count;}if (x >= y) {return f((x - y), y, ++count);} else {return f(x, (y - x), ++count);}} }C、不同子串
試題 C: 不同子串
本題總分:10 分
【問題描述】
一個字符串的非空子串是指字符串中長度至少為 1 的連續的一段字符組成
的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 個。
注意在計算時,只算本質不同的串的個數。
請問,字符串0100110001010001 有多少個不同的非空子串?
【答案提交】
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一
個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
題解:
package action;import java.util.HashSet; import java.util.Set;public class demo {public static void main(String[] args) {String str = "0100110001010001";Set<String> set = new HashSet<String>();for (int i = 0; i <= str.length(); i++) {for (int j = i+1; j <= str.length(); j++) {set.add(str.substring(i, j));}}System.out.println(set.size());} }D、質數
試題 D: 質數
本題總分:10 分
【問題描述】
我們知道第一個質數是 2、第二個質數是 3、第三個質數是 5……請你計算
第 2019 個質數是多少?
【答案提交】
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一
個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
題解:
package action;public class demo {public static void main(String[] args) {int count = 1;for (int i = 1; i <= 2019; i++) {for (int j = count + 1;; j++) {if (f(j)) {count = j;break;}}}System.out.println(count);}/*** 判斷一個數是否是質數* @param x* @return*/public static boolean f(int x) {if (x < 3) {return (x > 1);}for (int i = 2; i <= Math.sqrt(x); i++) {if (x % i == 0) {return false;}}return true;} }E、最大降雨量
試題 E: 最大降雨量
本題總分:15 分
【問題描述】
由于沙之國長年干旱,法師小明準備施展自己的一個神秘法術來求雨。
這個法術需要用到他手中的 49 張法術符,上面分別寫著 1 至 49 這 49 個
數字。法術一共持續 7 周,每天小明都要使用一張法術符,法術符不能重復使
用。
每周,小明施展法術產生的能量為這周 7 張法術符上數字的中位數。法術
施展完 7 周后,求雨將獲得成功,降雨量為 7 周能量的中位數。
由于干旱太久,小明希望這次求雨的降雨量盡可能大,請大最大值是多少?
【答案提交】
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一
個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分
題解:
package action;public class demo {public static void main(String[] args) {System.out.println(49 - 16 + 1);} }F、旋轉
試題 F: 旋轉
時間限制: 1.0s 內存限制: 512.0MB 本題總分:15 分
【問題描述】
圖片旋轉是對圖片最簡單的處理方式之一,在本題中,你需要對圖片順時
針旋轉 90 度。
我們用一個 n × m 的二維數組來表示一個圖片,例如下面給出一個 3 × 4 的
圖片的例子:
1 3 5 7
9 8 7 6
3 5 9 7
這個圖片順時針旋轉 90 度后的圖片如下:
3 9 1
5 8 3
9 7 5
7 6 7
給定初始圖片,請計算旋轉后的圖片。
【輸入格式】
輸入的第一行包含兩個整數 n 和 m,分別表示行數和列數。
接下來 n 行,每行 m 個整數,表示給定的圖片。圖片中的每個元素(像
素)為一個值為 0 至 255 之間的整數(包含 0 和 255)。
【輸出格式】
輸出 m 行 n 列,表示旋轉后的圖片。
【樣例輸入】
3 4
1 3 5 7
9 8 7 6
3 5 9 7
【樣例輸出】
3 9 1
5 8 3
9 7 5
7 6 7
【評測用例規模與約定】
對于 30% 的評測用例,1 ≤ n, m ≤ 10。
對于 60% 的評測用例,1 ≤ n, m ≤ 30。
對于所有評測用例,1 ≤ n, m ≤ 100。
題解:
package action;import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int [][] arr = new int[n+1][m+1];for (int i = 1; i < arr.length; i++) {for (int j = 1; j < arr[i].length; j++) {arr[i][j] = sc.nextInt();}}int [][] brr = new int[m+1][n+1];// 轉換for (int i = 1; i < brr.length; i++) {for (int j = 1; j < brr[i].length; j++) {brr[i][j] = arr[n-j+1][i]; }}// 打印for (int i = 1; i < brr.length; i++) {for (int j = 1; j < brr[i].length; j++) {System.out.print(brr[i][j]+" ");}System.out.println();}} }G、外賣店優先級
試題 G: 外賣店優先級
時間限制: 1.0s 內存限制: 512.0MB 本題總分:20 分
【問題描述】
“飽了么”外賣系統中維護著 N 家外賣店,編號 1 ~ N。每家外賣店都有
一個優先級,初始時 (0 時刻) 優先級都為 0。
每經過 1 個時間單位,如果外賣店沒有訂單,則優先級會減少 1,最低減
到 0;而如果外賣店有訂單,則優先級不減反加,每有一單優先級加 2。
如果某家外賣店某時刻優先級大于 5,則會被系統加入優先緩存中;如果
優先級小于等于 3,則會被清除出優先緩存。
給定 T 時刻以內的 M 條訂單信息,請你計算 T 時刻時有多少外賣店在優
先緩存中。
【輸入格式】
第一行包含 3 個整數 N、M 和 T。
以下 M 行每行包含兩個整數 ts 和 id,表示 ts 時刻編號 id 的外賣店收到
一個訂單。
【輸出格式】
輸出一個整數代表答案。
【樣例輸入】
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2
【樣例輸出】
1
【樣例解釋】
6 時刻時,1 號店優先級降到 3,被移除出優先緩存;2 號店優先級升到 6,
加入優先緩存。所以是有 1 家店 (2 號) 在優先緩存中。
【評測用例規模與約定】
對于 80% 的評測用例,1 ≤ N, M, T ≤ 10000。
對于所有評測用例,1 ≤ N, M, T ≤ 100000,1 ≤ ts ≤ T,1 ≤ id ≤ N
題解:
package action;import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int t = sc.nextInt();int[][] arr = new int[n + 1][t + 1];for (int i = 0; i < m; i++) {int t1 = sc.nextInt(); // 時刻int n1 = sc.nextInt(); // 幾店arr[n1][t1]++; // n店t時刻的訂單數}int count = 0; // 優先緩存個數// 對每家店進行計算for (int i = 1; i <= n; i++) {int num = 0; // 緩存值boolean f = false; // 判斷是否是優先緩存for (int j = 1; j <= t; j++) {if (arr[i][j] == 0) { // 沒有訂單時if (num <= 0) {num = 0;} else {num--;}} else {num += 2 * arr[i][j]; // 有訂單時:緩存值是每個訂加2}if (num > 5) {f = true;}if (num <= 3) {f = false;}}if (f) {count++;}}System.out.println(count);} }測試數據通過
H、人物相關性分析
試題 H: 人物相關性分析
時間限制: 1.0s 內存限制: 512.0MB 本題總分:20 分
【問題描述】
小明正在分析一本小說中的人物相關性。他想知道在小說中 Alice 和 Bob
有多少次同時出現。
更準確的說,小明定義 Alice 和 Bob“同時出現”的意思是:在小說文本
中 Alice 和 Bob 之間不超過 K 個字符。
例如以下文本:
This is a story about Alice and Bob. Alice wants to send a private message to Bob.
假設 K = 20,則 Alice 和 Bob 同時出現了 2 次,分別是”Alice and Bob”
和”Bob. Alice”。前者 Alice 和 Bob 之間有 5 個字符,后者有 2 個字符。
注意:
1. Alice 和 Bob 是大小寫敏感的,alice 或 bob 等并不計算在內。
2. Alice 和 Bob 應為單獨的單詞,前后可以有標點符號和空格,但是不能
有字母。例如 Bobbi 並不算出現了 Bob。
【輸入格式】
第一行包含一個整數 K。
第二行包含一行字符串,只包含大小寫字母、標點符號和空格。長度不超
過 1000000。
【輸出格式】
輸出一個整數,表示 Alice 和 Bob 同時出現的次數。
【樣例輸入】
20
This is a story about Alice and Bob. Alice wants to send a private message to Bob.
【樣例輸出】
2
【評測用例規模與約定】
對于所有評測用例,1 ≤ K ≤ 1000000。
題解:
package action;import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int K = sc.nextInt();sc.nextLine();String str = sc.nextLine();int count = 0;for (int i = 0; i < str.length() - 8; i++) {if (str.charAt(i) == 'A') {String alicestr = str.substring(i, i + 5);if (alicestr.equals("Alice")) {for (int j = 0; j < K - 3; j++) {if (str.charAt(i + j) == 'B') {String bobstr = str.substring(i + j, i + j + 3);if (bobstr.equals("Bob")) {count++;}}}}}if (str.charAt(i) == 'B') {String bobstr = str.substring(i, i + 3);System.out.println(bobstr);if (bobstr.equals("Bob")) {for (int j = 0; j < K - 5; j++) {if (str.charAt(i + j) == 'A') {String alicestr = str.substring(i + j, i + j + 5);System.out.println(alicestr);if (alicestr.equals("Alice")) {count++;}}}}}}System.out.println(count);} }測試數據通過?
I、等差數列
試題 I: 等差數列
時間限制: 1.0s 內存限制: 512.0MB 本題總分:25 分
【問題描述】
數學老師給小明出了一道等差數列求和的題目。但是粗心的小明忘記了一
部分的數列,只記得其中 N 個整數。
現在給出這 N 個整數,小明想知道包含這 N 個整數的最短的等差數列有
幾項?
【輸入格式】
輸入的第一行包含一個整數 N。
第二行包含 N 個整數 A1, A2, · · · , AN。(注意 A1 ~ AN 并不一定是按等差數
列中的順序給出)
【輸出格式】
輸出一個整數表示答案。
【樣例輸入】
5
2 6 4 10 20
【樣例輸出】
10
【樣例說明】
包含 2、6、4、10、20 的最短的等差數列是 2、4、6、8、10、12、14、16、
18、20。
【評測用例規模與約定】
對于所有評測用例,2 ≤ N ≤ 100000,0 ≤ Ai ≤ 109。
題解:
package action;import java.util.Arrays; import java.util.Scanner;public class demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] arr = new int[n];for (int i = 0; i < arr.length; i++) {arr[i] = sc.nextInt();}Arrays.sort(arr);// 獲取最小差值int min = arr[arr.length - 1];for (int i = 1; i < arr.length; i++) {if ((arr[i] - arr[0]) < min) {min = (arr[i] - arr[0]);}}System.out.println((arr[arr.length - 1] - arr[0]) / min + 1);} }J、打掃機器人
試題 J: 掃地機器人
時間限制: 1.0s 內存限制: 512.0MB 本題總分:25 分
【問題描述】
小明公司的辦公區有一條長長的走廊,由 N 個方格區域組成,如下圖所
示。
走廊內部署了 K 臺掃地機器人,其中第 i 臺在第 Ai 個方格區域中。
已知掃地機器人每分鐘可以移動到左右相鄰的方格中,并將該區域清掃干
凈。
請你編寫一個程序,計算每臺機器人的清掃路線,使得
1. 它們最終都返回出發方格,
2. 每個方格區域都至少被清掃一遍,
3. 從機器人開始行動到最后一臺機器人歸位花費的時間最少。
注意多臺機器人可以同時清掃同一方塊區域,它們不會互相影響。
輸出最少花費的時間。
在上圖所示的例子中,最少花費時間是 6。第一臺路線:2-1-2-3-4-3-2,清
掃了 1、2、3、4 號區域。第二臺路線 5-6-7-6-5,清掃了 5、6、7。第三臺路線
10-9-8-9-10,清掃了 8、9 和 10。
【輸入格式】
第一行包含兩個整數 N 和 K。
接下來 K 行,每行一個整數 Ai。?
案例:
輸入:
10 3
3 5 8
輸出:
6
題解視頻:
【JavaC組第十屆第十題掃地機器人_嗶哩嗶哩_bilibili】
題解:
package action; import java.util.Arrays; import java.util.Scanner;public class demo {static int N,K;static int arr[];//存儲機器人坐標public static void main(String[] args) {Scanner sc=new Scanner(System.in);N=sc.nextInt();K=sc.nextInt();arr=new int[K];for (int i = 0; i < K; i++) {arr[i]=sc.nextInt();}//輸入流沒用了sc.close();Arrays.sort(arr);//自然排序int l=0,r=N,mid=0;while (l <= r) {//相當于二分查找mid=(r+l)>>>1;if(check(mid)) {r = mid-1;}else l = mid+1; }System.out.println((mid-1)*2);}private static boolean check(int m) {int sum=0;//記錄掃描區域for (int i = 0; i < K; i++) {//遍歷每個機器人if(arr[i]-m<=sum) {if(arr[i]<=sum) {sum=arr[i]+m-1;}else sum+=m;}else return false;}return sum >= N;} }測試數據:
10 3 5 2 10希望能對大家有所幫助。
總結
以上是生活随笔為你收集整理的第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第九届蓝桥杯省赛JavaC组真题——详细
- 下一篇: PMP每日三题(2022年3月8日)