大家好,我是晴天學(xué)長(zhǎng),本次分享,制作不易,本次題解只用于學(xué)習(xí)用途,如果有考試需要的小伙伴請(qǐng)考完試再來(lái)看題解進(jìn)行學(xué)習(xí),需要的小伙伴可以點(diǎn)贊關(guān)注評(píng)論一波哦!后續(xù)會(huì)繼續(xù)更新第三期的。??????
一 .放像素
問(wèn)題描述
小藍(lán)要在屏幕上放置一行文字,每個(gè)字的寬度相同。
小藍(lán)發(fā)現(xiàn),如果每個(gè)字的寬為 36 像素,一行正好放下 30 個(gè)字,字符之間和前后都沒(méi)有任何空隙。
請(qǐng)問(wèn),如果每個(gè)字寬為 10 像素,字符之間不包含空隙,一行可以放下多少個(gè)字?
答案提交
這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫(xiě)這個(gè)整數(shù),填寫(xiě)多余的內(nèi)容將無(wú)法得分。
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
- 無(wú)
4).總結(jié)
- 答案:108
二 .求余數(shù)
問(wèn)題描述
求 2**2023%1000,即 2的2023次方除以1000的余數(shù)。
答案提交
這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫(xiě)這個(gè)整數(shù),填寫(xiě)多余的內(nèi)容將無(wú)法得分。
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
package LanQiaoTest.枚舉;
public class 求余數(shù)_2 {
public static void main(String[] args) {
int num = 2;
int sum = 0;
for (int i = 2; i <= 2023; i++) {
num = (num*2)%1000;
sum++;
}
System.out.println(num);
}
}
4).總結(jié)
- 答案:608
三 .進(jìn)制轉(zhuǎn)化
問(wèn)題描述 如果一個(gè)正整數(shù)轉(zhuǎn)化成二進(jìn)制與轉(zhuǎn)換成八進(jìn)制后所有數(shù)位的數(shù)字之和相等,則稱為數(shù)位和相等的數(shù)。 前幾個(gè)數(shù)位和相等的正整數(shù)為 1, 8, 9, 64, …… 請(qǐng)問(wèn)第 23 個(gè)數(shù)位和相等的正整數(shù)是多少? 答案提交 這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫(xiě)這個(gè)整數(shù),填寫(xiě)多余的內(nèi)容將無(wú)法得分。
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
package LanQiaoTest.枚舉;
public class 進(jìn)制轉(zhuǎn)換_3 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
while (sum < 23) {
if (two(num) == eight(num)) {
sum++;
System.out.print(num + " ");
}
num++;
}
}
public static int two(int i) {
String two = Integer.toString(i,2);
int sum = 0;
for (int j = 0; j < two.length(); j++) {
String temp = String.valueOf(two.charAt(j));
sum += Integer.parseInt(temp);
}
return sum;
}
public static int eight(int i) {
String eight = Integer.toString(i,8);
int sum = 0;
for (int j = 0; j < eight.length(); j++) {
String temp = String.valueOf(eight.charAt(j));
sum += Integer.parseInt(temp);
}
return sum;
}
}
4).總結(jié)
- 答案:4169
四 .約數(shù)個(gè)數(shù)
問(wèn)題描述
對(duì)于以下這些數(shù)(6行,每行6個(gè),共36個(gè)),請(qǐng)問(wèn)約數(shù)個(gè)數(shù)最多的是哪個(gè)?(如果有多個(gè),請(qǐng)回答出現(xiàn)最早的那個(gè))
393353 901440 123481 850930 423154 240461
373746 232926 396677 486579 744860 468782
941389 777714 992588 343292 385198 876426
483857 241899 544851 647930 772403 109929
882745 372491 877710 340000 659788 658675
296521 491295 609764 718967 842000 670302
答案提交 這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫(xiě)這個(gè)整數(shù),填寫(xiě)多余的內(nèi)容將無(wú)法得分。
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
package LanQiaoTest.枚舉;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 約數(shù)個(gè)數(shù)_4 {
static String[] lines;
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static int[][] nums = new int[6][6];
public static void main(String[] args) throws IOException {
for (int i = 0; i < 6; i++) {
lines = in.readLine().split(" ");
for (int j = 0; j < 6; j++) {
nums[i][j] = Integer.parseInt(lines[j]);
}
}
//打印出來(lái)
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
System.out.print(nums[i][j] + " ");
;
}
System.out.println();
}
//開(kāi)始計(jì)算
int maxnums = 0;
int max = Integer.MIN_VALUE;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
int temp = yueshu(nums[i][j]);
if (temp>max){
maxnums = nums[i][j];
max = temp;
}
}
}
System.out.println(maxnums);
}
//算約數(shù)個(gè)數(shù)
public static int yueshu(int nums) {
int sum = 1;
for (int i = 2; i <= nums; i++) {
int temp = 0;
while (nums % i == 0) {
temp++;
nums /= i;
}
if (temp != 0) {
sum *= temp+1;
}
}
return sum;
}
}
4).總結(jié)
- 答案: 901440
五 .傳染性
問(wèn)題描述
小藍(lán)有一個(gè)01矩陣。他打算將第一行第一列的 0 變?yōu)?2 。變化過(guò)程有傳染性,每次 2 的上下左右四個(gè)相鄰的位置中的 0 都會(huì)變成 2 。直到最后每個(gè) 2 的周圍都是 1 或 2 結(jié)束。
請(qǐng)問(wèn),最終矩陣中有多少個(gè) 2 ?
以下是小藍(lán)的矩陣,共 30 行 40 列。
0000100010000001101010101001001100000011
0101111001111101110111100000101010011111
1000010000011101010110000000001011010100
0110101010110000000101100100000101001001
0000011010100000111111001101100010101001
0110000110000000110100000000010010100011
0100110010000110000000100010000101110000
0010011010100110001111001101100110100010
1111000111101000001110010001001011101101
0011110100011000000001101001101110100001
0000000101011000010011111001010011011100
0000100000011001000100101000111011101100
0010110000001000001010100011000010100011
0110110000100011011010011010001101011011
0000100100000001010000101100000000000010
0011001000001000000010011001100101000110
1110101000011000000100011001001100111010
0000100100111000001101001000001010010001
0100010010000110100001100000110111110101
1000001001100010011001111101011001110001
0000000010100101000000111100110010101101
0010110101001100000100000010000010110011
0000011101001001000111011000100111010100
0010001100100000011000101011000000010101
1001111010010110011010101110000000101110
0110011101000010100001000101001001100010
1101000000010010011001000100110010000101
1001100010100010000100000101111111111100
1001011010101100001000000011000110110000
0011000100011000010111101000101110110001
答案提交 這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫(xiě)這個(gè)整數(shù),填寫(xiě)多余的內(nèi)容將無(wú)法得分。
1) .算法思路
- dfs
2).算法步驟
1.使用循環(huán)讀取輸入的行,并將每個(gè)字符解析為整數(shù)存儲(chǔ)在nmus數(shù)組中。
2.打印輸出nmus數(shù)組。
3.調(diào)用dfs方法進(jìn)行深度優(yōu)先搜索,初始時(shí)傳入起始坐標(biāo)和nmus數(shù)組。
4.在dfs方法中,將當(dāng)前坐標(biāo)標(biāo)記為已訪問(wèn)(值設(shè)為2),并增加計(jì)數(shù)器sum。
5.遍歷四個(gè)方向上的相鄰坐標(biāo)。
6.計(jì)算新的坐標(biāo)newx和newy。
7.檢查新坐標(biāo)是否在合法范圍內(nèi),并且對(duì)應(yīng)位置的值為0(未訪問(wèn))。
8.如果滿足條件,遞歸調(diào)用dfs方法,傳入新的坐標(biāo)和nmus數(shù)組。
9.在dfs方法結(jié)束后,返回上一層遞歸。
10.在主方法中調(diào)用dfs方法,傳入起始坐標(biāo)和nmus數(shù)組。
11.輸出計(jì)數(shù)器sum的值。
3). 代碼實(shí)例
package LanQiaoTest.DFS;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class 傳染性_5 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static String[] lines;
static int sum;
static int[] dx = {0, 0, -1, 1};
static int[] dy = {-1, 1, 0, 0};
public static void main(String[] args) throws IOException {
//接收矩陣
int[][] nmus = new int[31][41];
for (int i = 1; i <= 30; i++) {
lines = in.readLine().split("");
for (int j = 1; j <= 40; j++) {
nmus[i][j] = Integer.parseInt(lines[j - 1]);
}
}
//打印出來(lái)
for (int i = 1; i <= 30; i++) {
for (int j = 1; j <= 40; j++) {
System.out.print(nmus[i][j] + " ");
}
System.out.println();
}
dfs(1, 1, nmus);
System.out.println(sum);
}
public static void dfs(int x, int y, int[][] nums) {
//出口
nums[x][y] = 2;
sum++;
for (int i = 0; i < 4; i++) {
int newx = x + dx[i];
int newy = y + dy[i];
if (newx >= 1 && newx <= 30 && newy >= 1 && newy <= 40 && nums[newx][newy] == 0) {
dfs(newx, newy, nums);
}
}
}
}
4).總結(jié)
- 答案:541
六.左移一位
問(wèn)題描述
給定一個(gè)正好六位的正整數(shù) x,請(qǐng)將 x 循環(huán)左移一位后輸出。
所謂循環(huán)左移一位,是指將原來(lái)的十萬(wàn)位變?yōu)閭€(gè)位,原來(lái)的萬(wàn)位到個(gè)位向左移動(dòng)依次變?yōu)槭f(wàn)位到十位。
例如:194910 左移一位變?yōu)?949101 。
又如:987123 左移一位變?yōu)?871239 。
輸入格式
輸入一行包含一個(gè)整數(shù) x 。保證輸入的 x 正好包含 6 個(gè)十進(jìn)制數(shù)位,而且十萬(wàn)位和萬(wàn)位上的數(shù)字均不為 0 。
輸出格式
輸出一行包含一個(gè)整數(shù),表示答案。
樣例輸入
194910
樣例輸出
949101
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new PrintWriter(System.out));
static String[] lines;
public static void main(String[] args) throws IOException {
lines = in.readLine().split(" ");
int n = Integer.parseInt(lines[0]);
String s = Integer.toString(n);
String ans = s.substring(1) + s.charAt(0);
int result = Integer.parseInt(ans);
out.print(result);
out.flush();
}
}
4).總結(jié)
七.最后元音
問(wèn)題描述
輸入一個(gè)僅包含小寫(xiě)英文字母的字符串,請(qǐng)問(wèn)這個(gè)字符串中的最后一元音是什么。
在英文中,a, e, i, o, u 共 5 個(gè)字母是元音字母,其它字母不是元音字母。
輸入格式
輸入一行包含一個(gè)字符串,僅由小寫(xiě)英文字符組成,字符串中至少包含一個(gè)元音字母。
輸出格式
輸出一行包含一個(gè)字符,表示答案。
樣例輸入
lanqiao
樣例輸出
o
樣例輸入
cup
樣例輸出
u
評(píng)測(cè)用例規(guī)模與約定
對(duì)于所有評(píng)測(cè)用例,1 <= 字符數(shù)量 <= 10000 。
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new PrintWriter(System.out));
static String[] lines;
public static void main(String[] args) throws IOException {
Set<String> set = new HashSet<>();
lines = in.readLine().split(" ");
String s = lines[0];
set.add("a");
set.add("e");
set.add("i");
set.add("o");
set.add("u");
for (int i = s.length()-1; i >= 0 ; i--) {
String c = String.valueOf(s.charAt(i));
if (set.contains(c)) {
out.println(c);
out.flush();
return;
}
}
}
}
4).總結(jié)
- 答案:
八. 整數(shù)轉(zhuǎn)化
問(wèn)題描述
給定一個(gè)整數(shù),對(duì)這個(gè)整數(shù)的一次轉(zhuǎn)換是指將這個(gè)整數(shù)變?yōu)檫@個(gè)整數(shù)的所有數(shù)位上的非零數(shù)字的乘積。
例如,對(duì) 123456789 進(jìn)行一次轉(zhuǎn)換變?yōu)?1*2*3*4*5*6*7*8*9=362880,再進(jìn)行一次轉(zhuǎn)換變?yōu)?3*6*2*8*8=2304,再進(jìn)行一次轉(zhuǎn)換變?yōu)?2*3*4=24,再進(jìn)行一次轉(zhuǎn)換變?yōu)?8。
給定一個(gè)整數(shù),請(qǐng)依次將轉(zhuǎn)換過(guò)程中經(jīng)歷的每個(gè)整數(shù)輸出,直到小于 10 。
輸入格式
輸入一行包含一個(gè)整數(shù) n 。
輸出格式
輸出多行,每行包含一個(gè)整數(shù)。
樣例輸入
123456789
樣例輸出
362880
2304
24
8
評(píng)測(cè)用例規(guī)模與約定
對(duì)于 50% 的評(píng)測(cè)用例,1 <= n <= 10**9 (10的9次方)。
對(duì)于所有評(píng)測(cè)用例,1 <= n <= 10**18 (10的18次方)。
1) .算法思路
- 無(wú)
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new PrintWriter(System.out));
static String[] lines;
public static void main(String[] args) throws IOException {
lines = in.readLine().split(" ");
long sum = Long.parseLong(lines[0]);
while (sum > 10) {
long temp = sum;
long ans = 1;
while (temp > 0) {
if (temp % 10 != 0) {
ans *= temp % 10;
temp /= 10;
} else temp /= 10;
}
out.println(ans);
sum = ans;
}
out.flush();
out.close();
}
}
4).總結(jié)
九. 最大移動(dòng)方格
問(wèn)題描述
小藍(lán)站在一個(gè) n 行 m 列的方格圖中間,方格圖的每一個(gè)方格上都標(biāo)有一個(gè)正整數(shù)。
如果兩個(gè)相鄰方格(上下左右四個(gè)方向相鄰)內(nèi)的數(shù)的最大公約數(shù)大于 1 ,則可以從其中一個(gè)方格移動(dòng)到另一個(gè)方格,當(dāng)然也可以從另一個(gè)方格移回第一個(gè)方格。
假設(shè)小藍(lán)開(kāi)始時(shí)站在第 r 行第 c 列,請(qǐng)問(wèn)小藍(lán)可以移動(dòng)到方格圖內(nèi)的多少個(gè)方格?
輸入格式
輸入的第一行包含兩個(gè)整數(shù) n, m ,用一個(gè)空格分隔,表示方格圖的行數(shù)和列數(shù)。
接下來(lái) n 行,每行包含 m 個(gè)正整數(shù),相鄰整數(shù)間用一個(gè)空格分隔,依次表示方格圖中從第 1 行到第 n 行,每行從第 1 列到第 m 列中的數(shù)。
接下來(lái)一行包含兩個(gè)整數(shù) r, c,用一個(gè)空格分隔,表示小藍(lán)所在的行號(hào)和列號(hào)。
輸出格式
輸出一行包含一個(gè)整數(shù),表示答案。
樣例輸入
3 4
3 6 5 5
2 4 3 5
7 8 3 8
3 2
樣例輸出
5
評(píng)測(cè)用例規(guī)模與約定
對(duì)于50%的評(píng)測(cè)用例,1 <= n, m <= 100,方格圖中的每個(gè)數(shù)不超過(guò) 10**5 (10的5次方)。
對(duì)于所有評(píng)測(cè)用例,1 <= n, m <= 1000,方格圖中的每個(gè)數(shù)不超過(guò) 10**9 (10的9次方)。
1) .算法思路
- dfs
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new PrintWriter(System.out));
static String[] lines;
static long nums[][] = new long[1100][1100];
static boolean[][] st = new boolean[1100][1100];
static long sum = 0;
static int[] dx = {0, 0, -1, 1};
static int[] dy = {-1, 1, 0, 0};
public static void main(String[] args) throws IOException {
lines = in.readLine().split(" ");
int n = Integer.parseInt(lines[0]);
int m = Integer.parseInt(lines[1]);
//接收數(shù)據(jù)
for (int i = 1; i <= n; i++) {
lines = in.readLine().split(" ");
for (int j = 1; j <= m; j++) {
nums[i][j] = Long.parseLong(lines[j - 1]);
}
}
lines = in.readLine().split(" ");
int r = Integer.parseInt(lines[0]);
int c = Integer.parseInt(lines[1]);
dfs(r,c,nums,n,m);
out.println(sum);
out.flush();
out.close();
}
private static void dfs(int x, int y, long[][] nums, int n, int m) {
st[x][y] = true;
sum++;
for (int i = 0; i < 4; i++) {
int newx = x + dx[i];
int newy = y + dy[i];
if (newx >= 1 && newx <= n && newy >= 1 && newy <= m && gcd(nums[x][y], nums[newx][newy]) > 1&&st[newx][newy]==false) {
dfs(newx, newy, nums, n, m);
}
}
}
//最大公約數(shù)
private static long gcd(long a, long b) {
return b == 0 ? a : gcd(b, a % b);
}
}
4).總結(jié)
十. 最大區(qū)間和
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-770396.html
問(wèn)題描述
給定一個(gè)序列 a[1], a[2], …, a[n] 和一個(gè)整數(shù) k,請(qǐng)找出一個(gè)長(zhǎng)度正好為 k 的區(qū)間,使得區(qū)間中所有數(shù)的和最大。
即要找到一個(gè)整數(shù) p ,使得 1 <= p 且 p+k-1 <= n ,使得 a[p]+a[p+1]+...+a[p+k-1] 最大。
輸入格式
輸入的第一行包含兩個(gè)整數(shù) n , k。
第二行包含 n 個(gè)整數(shù),相鄰的整數(shù)之間使用一個(gè)空格分隔,表示給定的序列。
輸出格式
輸出一行包含一個(gè)整數(shù),表示最大的區(qū)間和,你只需要輸出和就行,不需要輸出方案。 樣例輸入
6 3
2 3 9 1 9 5
樣例輸出
19
評(píng)測(cè)用例規(guī)模與約定
對(duì)于 30% 的評(píng)測(cè)用例,1 <= k <= n <= 30,1 <= a[i] <= 100。
對(duì)于 60% 的評(píng)測(cè)用例,1 <= k <= n <= 1000,1 <= a[i] <= 10000。
對(duì)于所有評(píng)測(cè)用例,1 <= k <= n <= 100000,1 <= a[i] <= 1000000。
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-770396.html
1) .算法思路
- 前綴和+滑動(dòng)窗口
2).算法步驟
- 無(wú)
3). 代碼實(shí)例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
//前綴和+滑動(dòng)窗口
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter out = new PrintWriter(new PrintWriter(System.out));
static String[] lines;
public static void main(String[] args) throws IOException {
lines = in.readLine().split(" ");
int n = Integer.parseInt(lines[0]);
int k = Integer.parseInt(lines[1]);
long[] sum = new long[n];
lines = in.readLine().split(" ");
sum[0] = Integer.parseInt(lines[0]);
//前綴和
for (int i = 1; i < n; i++) {
sum[i] += Long.parseLong(lines[i])+sum[i-1];
}
long max = Long.MIN_VALUE;
//滑動(dòng)窗口
for (int i = 0; i <= n - k; i++) {
long ans = 0;
if (i==0){
ans = sum[i+k-1];
}
else {
ans = sum[i+k-1]-sum[i-1];
}
max = Math.max(max, ans);
}
out.println(max);
out.flush();
out.close();
}
}
4).總結(jié)
到了這里,關(guān)于第十五屆藍(lán)橋杯模擬賽(第二期)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!