2015蓝桥杯b组java_Java实现第十一届蓝桥杯JavaB组 省赛真题
試題 A: 指數計算
本題總分:5 分
【問題描述】
7 月1日是建黨日,從1921年到2020年, 已經帶領中國人民
走過了 99 年。
請計算:7 ^ 2020 mod 1921,其中A mod B表示A除以B的余數。
【答案提交】
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個
整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
package第十一屆藍橋杯;importjava.math.BigInteger;public classA指數計算 {public static voidmain(String[] args) {
BigInteger num1= new BigInteger("7");
BigInteger num2= new BigInteger("1921");
BigInteger num3=num1.pow(2020).remainder(num2);
System.out.println(num3);
}
}
試題 B: 解密
本題總分:5 分
【問題描述】
小明設計了一種文章加密的方法:對于每個字母 c,將它變成某個另外的
字符 Tc。下表給出了字符變換的規則:
字母c
Tc
字母c
Tc
字母c
Tc
字母c
Tc
a
y
n
l
A
Y
N
L
b
x
o
g
B
X
O
G
c
m
p
o
C
M
P
O
d
d
q
u
D
D
Q
U
e
a
r
f
E
A
R
F
f
c
s
s
F
C
S
S
g
i
t
z
G
I
T
Z
h
k
u
p
H
K
U
P
i
n
v
w
I
N
V
W
j
t
w
b
J
T
W
B
k
j
x
r
K
J
X
R
l
h
y
e
L
H
Y
E
m
q
z
v
M
Q
Z
V
例如,將字符串 YeRi 加密可得字符串EaFn。
小明有一個隨機的字符串,加密后為
EaFnjISplhFviDhwFbEjRjfIBBkRyY
(由 30 個大小寫英文字母組成,不包含換行符),請問原字符串是多少?
(如果你把以上字符串和表格復制到文本文件中,請務必檢查復制的內容
是否與文檔中的一致。在試題目錄下有一個文件 str.txt,第一行為上面的字符
串,后面 52 行依次為表格中的內容。)
【答案提交】
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個
只包含 30 個大小寫英文字母的字符串,在提交答案時只填寫這個字符串,填寫
多余的內容將無法得分。
package第十一屆藍橋杯;importjava.util.HashMap;importjava.util.Scanner;public classB解密 {public static voidmain(String[] args) {
HashMap map = new HashMap<>();
Scanner sc= newScanner(System.in);for (int i = 0;i<52;i++){char a = sc.next().trim().charAt(0);char b = sc.next().trim().charAt(0);
map.put(b,a);
}
String s=sc.next();
sc.close();char[] num =s.toCharArray();for (charc:num){
System.out.print(map.get(c));
}
}
}
輸入
a y n l A Y N L
b x o g B X O G
c m p o C M P O
d d q u D D Q U
e a r f E A R F
f c s s F C S S
g i t z G I T Z
h k u p H K U P
i n v w I N V W
j t w b J T W B
k j x r K J X R
l h y e L H Y E
m q z v M Q Z V
EaFnjISplhFviDhwFbEjRjfIBBkRyY
試題 C: 跑步訓練
本題總分:10 分
【問題描述】
小明要做一個跑步訓練。
初始時,小明充滿體力,體力值計為 10000。如果小明跑步,每分鐘損耗
600 的體力。如果小明休息,每分鐘增加300的體力。體力的損耗和增加都是
均勻變化的。
小明打算跑一分鐘、休息一分鐘、再跑一分鐘、再休息一分鐘……如此循
環。如果某個時刻小明的體力到達 0,他就停止鍛煉。
請問小明在多久后停止鍛煉。為了使答案為整數,請以秒為單位輸出答案。
答案中只填寫數,不填寫單位。
【答案提交】
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個
整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
package第十一屆藍橋杯;public classC跑步訓練 {public static voidmain(String[] args) {int target = 10000;int count = 0;boolean flag = true;while (true) {//如果小于600體力并且需要跑步,證明這一分鐘跑不完
if (target < 600 &&flag){break;
}if(flag) {
target-= 600;
flag= false;
}else{
target+= 300;
flag= true;
}
count++;
}//System.out.println(count);//最后要求秒數,一分鐘花費600體力,一秒花費10體力,體力除10就是剩下的跑步時間
int time = count * 60+target/10;
System.out.println(time);
}
}
試題 D: 合并檢測
本題總分:10 分
【問題描述】
最近存在A病,最近在 A 國蔓延,為了盡快控制病*,A國準
備給大量民眾進病*檢測。
然而,用于檢測的試劑盒緊缺。
為了解決這一困難,科學家想了一個辦法:合并檢測。即將從多個人(k
個)采集的標本放到同一個試劑盒中進行檢測。如果結果為陰性,則說明這 k
個人都是陰性,用一個試劑盒完成了 k 個人的檢測。如果結果為陽性,則說明
至少有一個人為陽性,需要將這 k 個人的樣本全部重新獨立檢測(從理論上看,
如果檢測前 k 1 個人都是陰性可以推斷出第k個人是陽性,但是在實際操作中
不會利用此推斷,而是將 k 個人獨立檢測),加上最開始的合并檢測,一共使用
了 k + 1 個試劑盒完成了k個人的檢測。
A 國估計被測的民眾的感染率大概是1%,呈均勻分布。請問k取多少能
最節省試劑盒?
【答案提交】
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個
整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
該解釋來自CSDN亓官劫,文末有其鏈接
試題 E: REPEAT 程序
本題總分:15 分
【問題描述】
附件 prog.txt 中是一個用某種語言寫的程序。
其中 REPEAT k 表示一個次數為k的循環。循環控制的范圍由縮進表達,
從次行開始連續的縮進比該行多的(前面的空白更長的)為循環包含的內容。
例如如下片段:
REPEAT 2:
A = A + 4
REPEAT 5:
REPEAT 6:
A = A + 5
A = A + 7
A = A + 8
A = A + 9
A = A + 4 所在的行到A = A + 8所在的行都在第一行的
循環兩次中。
REPEAT 6: 所在的行到A = A + 7所在的行都在REPEAT 5:循環中。
A = A + 5 實際總共的循環次數是2×5×6 = 60次。
請問該程序執行完畢之后,A 的值是多少?
【答案提交】
這是一道結果填空題,你只需要算出結果后提交即可。本題的結果為一個
整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
PS:
這個題我也不清楚對不對
package第十一屆藍橋杯;public classE_REPEAT程序 {public static voidmain(String[] args) {int A=0;for (int i=0;i<2;i++){
A+=4;for (int j=0;j<5;j++){for (int k=0;k<6;k++){
A+=5;
}
A+=7;
}
A+=8;
}
A+=9;
System.out.println(A);
}
}
試題 F: 分類計數
時間限制: 1.0s 內存限制: 512.0MB本題總分:15分
【問題描述】
輸入一個字符串,請輸出這個字符串包含多少個大寫字母,多少個小寫字
母,多少個數字。
【輸入格式】
輸入一行包含一個字符串。
【輸出格式】
輸出三行,每行一個整數,分別表示大寫字母、小寫字母和數字的個數。
【樣例輸入】
1+a=Aab
【樣例輸出】
1
3
1
【評測用例規模與約定】
對于所有評測用例,字符串由可見字符組成,長度不超過 100。
package第十一屆藍橋杯;importjava.util.Scanner;public classF分類計數 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
String s=sc.next();
sc.close();char[] num =s.toCharArray();int upp=0,low=0,nums=0;for (charc:num){if(Character.isUpperCase(c)){++upp;
}else if(Character.isLowerCase(c)){++low;
}else if(Character.isDigit(c)){++nums;
}
}
System.out.println(upp);
System.out.println(low);
System.out.println(nums);
}
}
試題 G: 整除序列
時間限制: 1.0s 內存限制: 512.0MB本題總分:20分
【問題描述】
有一個序列,序列的第一個數是 n,后面的每個數是前一個數整除2,請輸
出這個序列中值為正數的項。
【輸入格式】
輸入一行包含一個整數 n。
【輸出格式】
輸出一行,包含多個整數,相鄰的整數之間用一個空格分隔,表示答案。
【樣例輸入】
20
【樣例輸出】
20 10 5 2 1
【評測用例規模與約定】
對于 80% 的評測用例,1≤n≤109。
對于所有評測用例,1 ≤n≤1018。
package第十一屆藍橋杯;importjava.util.Scanner;public classG整除序列 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);int n =sc.nextInt();
sc.close();while (n != 0) {
System.out.print(n+ " ");
n= n >> 1;//等價于/2,位運算相對快一些
}
}
}
試題 H: 走方格
時間限制: 1.0s 內存限制: 512.0MB本題總分:20分
【問題描述】
在平面上有一些二維的點陣。
這些點的編號就像二維數組的編號一樣,從上到下依次為第 1 至第n行,
從左到右依次為第 1 至第m列,每一個點可以用行號和列號來表示。
現在有個人站在第 1 行第1列,要走到第n行第m列。只能向右或者向下
走。
注意,如果行號和列數都是偶數,不能走入這一格中。
問有多少種方案。
【輸入格式】
輸入一行包含兩個整數 n, m。
【輸出格式】
輸出一個整數,表示答案。
【樣例輸入】
3 4
【樣例輸出】
2
【樣例輸入】
6 6
【樣例輸出】
0
【評測用例規模與約定】
對于所有評測用例,1 ≤n≤30, 1≤m≤30。
package第十一屆藍橋杯;importjava.util.Scanner;public classH走方格 {public static voidmain(String[] args) {//輸入矩陣的寬高
Scanner sc = newScanner(System.in);int n =sc.nextInt();int m =sc.nextInt();
sc.close();int[][] dp = new int[n][m];
dp[0][0]=1;//這個規律是只能往右下走,也就是只能取左上的值
for (int i=0;i
if(i==0 && j==0){continue;
}//只要不是第一行就可以取上面的
if(i>0){
dp[i][j]+=dp[i-1][j];
}//只要不是第一列就可以取左面的
if(j>0){
dp[i][j]+=dp[i][j-1];
}//如果是偶數行列不能取值,這里是奇數,因為我的是從0開始,所以偶數的就變成了奇數
if((i&1)==1 && (j&1)==1){
dp[i][j]=0;
}
}
}
System.out.println(dp[n-1][m-1]);
}
}
試題 I: 字符串編碼
時間限制: 1.0s 內存限制: 512.0MB本題總分:25分
【問題描述】
小明發明了一種給由全大寫字母組成的字符串編碼的方法。對于每一個大
寫字母,小明將它轉換成它在 26 個英文字母中序號,即A→1, B→2,…Z→
26。
這樣一個字符串就能被轉化成一個數字序列:
比如 ABCXYZ →123242526。
現在給定一個轉換后的數字序列,小明想還原出原本的字符串。當然這樣
的還原有可能存在多個符合條件的字符串。小明希望找出其中字典序最大的字
符串。
【輸入格式】
一個數字序列。
【輸出格式】
一個只包含大寫字母的字符串,代表答案
【樣例輸入】
123242526
【樣例輸出】
LCXYZ
【評測用例規模與約定】
對于 20% 的評測用例,輸入的長度不超過20。
對于所有評測用例,輸入的長度不超過 200000。
PS:
這個題我寫復雜了,但是篩選條件就是這些,某些取反的情況可以少些很多if
package第十一屆藍橋杯;importjava.util.Scanner;public classI字符串編碼 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
String s=sc.next();
sc.close();
StringBuilder sb= newStringBuilder();int len =s.length();char[] num =s.toCharArray();for (int i = 0; i < len; i++) {//1開頭
if (num[i] == '1') {//第i+2位是否為0,如果為0,當前位就不能和i+1位合并成一個字母
if (i < len - 2) {//不為0
if (num[i + 2] != '0') {//System.out.println((num[i]-'0') * 10 + num[i + 1] + 'A' -1 -'0' );
sb.append((char) ((num[i] - '0') * 10 + num[i + 1] + 'A' - 1 - '0'));++i;//為0,當前位就不能和i+1位合并成一個字母,(如果合成字母,剩下一個0沒辦法轉換)
} else{
sb.append((char) (num[i] - '0' + 'A' - 1));
}//i+2已超過盡頭
} else{//看i+1位是否存在
if (i < len - 1) {
sb.append((char) ((num[i] - '0') * 10 + num[i + 1] + 'A' - 1 - '0'));//不存在,第i位為最后一位
} else{
sb.append((char) (num[i] - '0' + 'A' - 1));
}break;
}//2開頭
} else if (num[i] == '2') {//看存不存在下一位
if (i < len - 1) {//看下一位是不是小于6,因為字母的大小不能超過26
if (num[i + 1] <= '6') {//看第i+2位是否存在
if (i < len - 2) {//看第i+2位是否=0
if (num[i + 2] != '0') {
sb.append((char) ((num[i] - '0') * 10 + num[i + 1] + 'A' - 1 - '0'));++i;//為0,當前位就不能和i+1位合并成一個字母,(如果合成字母,剩下一個0沒辦法轉換)
} else{
sb.append((char) (num[i] - '0' + 'A' - 1));
}//不存在的話,就直接添加就行
} else{
sb.append((char) ((num[i] - '0') * 10 + num[i + 1] + 'A' - 1 - '0'));break;
}//如果大于6,證明不能和后一位合并
} else{
sb.append((char) (num[i] - '0' + 'A' - 1));
}//不存在下一位,這一位就直接放進去
} else{
sb.append((char) (num[i] - '0' + 'A' - 1));
}//如果大于2的話,就直接添加就行,字母沒有2以上開頭的
} else{
sb.append((char) (num[i] - '0' + 'A' - 1));
}
}
System.out.println(sb.toString());
}public static char getUppLetter(intnum) {
System.out.println((char) (num));return (char) (num);
}
}
試題 J: 整數小拼接
時間限制: 1.0s 內存限制: 512.0MB本題總分:25分
【問題描述】
給定義個長度為 n 的數組A1, A2,· · ·, An。你可以從中選出兩個數Ai和Aj (i不等于j),然后將Ai和Aj一前一后拼成一個新的整數。例如12和345可
以拼成 12345 或34512。注意交換Ai和Aj的順序總是被視為2種拼法,即便
是 Ai = Aj 時。
請你計算有多少種拼法滿足拼出的整數小于等于 K。
【輸入格式】
第一行包含 2 個整數n和K。
第二行包含 n 個整數A1, A2,· · ·, An。
【輸出格式】
一個整數代表答案。
【樣例輸入】
4 33
1 2 3 4
【樣例輸出】
8
【評測用例規模與約定】
對于 30% 的評測用例,1≤N≤1000, 1≤K≤108, 1≤Ai≤104。
對于所有評測用例,1 ≤N≤100000,1≤K≤1010,1≤Ai≤109。
此題等有時間在寫寫吧
總結
以上是生活随笔為你收集整理的2015蓝桥杯b组java_Java实现第十一届蓝桥杯JavaB组 省赛真题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沃土云创首批方案认证伙伴授牌,华为云与伙
- 下一篇: SUID SGID LINUX 权限安