蓝桥杯2020javaB部分题解(最喜欢暴力了)

B:寻找2020

【问题描述】

       小蓝有一个数字矩阵,里面只包含数字 0 和 2。小蓝很喜欢 2020,他想找到这个数字矩阵中有多少个 2020 。

       小蓝只关注三种构成 2020 的方式:

              • 同一行里面连续四个字符从左到右构成 2020。

              • 同一列里面连续四个字符从上到下构成 2020。

              • 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。

       例如,对于下面的矩阵:

              220000

              000000

              002202

              000000

              000022

              002020

       一共有 5 个 2020。其中 1 个是在同一行里的,1 个是在同一列里的,3 个是斜线上的。

       小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵。

       请帮助小蓝确定在他的矩阵中有多少个 2020。

       这里的文件是一个300 × 300的矩阵,大家可以自己创建一个这样的文件,用除2和0外的数字组成这个矩阵,然后在同一行、同一列、统一斜线上创建一个或多个2022进行测试。

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int[][] arr = new int[300][300];
		for (int i = 0; i < 300; i++) {
			String s = sc.next();
			for (int j = 0; j < s.length(); j++) {
				arr[i][j] = s.charAt(j) - '0';// - ‘0’是因为charAt取值是字符,加减另一个字符本质就是ASCLL码值的加减,运算结果是int型整数并且就是被减数的值,而这里arr数组需要的也是int型整数,正好=赋值就可。
			}
		}

        // 判断同一行
		int sum = 0;
		for (int i = 0; i < 300; i++) {
			for (int j = 0; j < 300; j++) {
				if (i + 3 < 300 && arr[i][j] == 2 && arr[i + 1][j] == 0 && arr[i + 2][j] == 2 && arr[i + 3][j] == 0) {
					sum++;
				}
			}
		}

        // 判断同一列
		for (int i = 0; i < 300; i++) {
			for (int j = 0; j < 300; j++) {
				if (j + 3 < 300 && arr[i][j] == 2 && arr[i][j + 1] == 0 && arr[i][j + 2] == 2 && arr[i][j + 3] == 0) {
					sum++;
				}
			}
		}

        // 判断同一斜线
		for (int i = 0; i < 300; i++) {
			for (int j = 0; j < 300; j++) {
				if (i + 3 < 300 && j + 3 < 300 && arr[i][j] == 2 && arr[i + 1][j + 1] == 0 && arr[i + 2][j + 2] == 2
						&& arr[i + 3][j + 3] == 0) {
					sum++;
				}
			}
		}
		System.out.println(sum);
	}
}

D:七段码

问题描述:

       上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二 极管,分别标记为 a, b, c, d, e, f, g。

       小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符 的表达时,要求所有发光的二极管是连成一片的。

       例如:b 发光,其他二极管不发光可以用来表达一种字符。

       例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。

       例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。

       例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光 的二极管没有连成一片。

       请问,小蓝可以用七段码数码管表达多少种不同的字符?

猪脑过载,不多bb,我甜蜜直接暴力画图。。。

 可以看出,还是很容易漏掉一些情况的,这种方法属于是下下策,慎用!对于这种情况可以先利用数学知识进行全排列分析,如果结果很大,还是老老实实敲代码求解吧。

F:成绩分析

【问题描述】

       小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

       请计算这次考试的最高分、最低分和平均分。

【输入格式】

       输入的第一行包含一个整数 n,表示考试人数。

       接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

【输出格式】

       输出三行。

       第一行包含一个整数,表示最高分。

       第二行包含一个整数,表示最低分。

       第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

【样例输入】

       7

       80

       92

       56

       74

       88

       99

       10

【样例输出】

       99

       10

       71.29

【评测用例规模与约定】

       对于 50% 的评测用例,1 ≤ n ≤ 100。

       对于所有评测用例,1 ≤ n ≤ 10000。

public class Main {
	public static void main(String[] args) {
		int sNum;
		int max;
		int min;
		float average;
		Scanner sc = new Scanner(System.in);
		sNum = sc.nextInt();
		int[] arr = new int[sNum];
		for(int i = 0; i < arr.length; i++) {
			arr[i] = sc.nextInt();
		}
		Arrays.sort(arr);
		System.out.println(arr[sNum - 1]);
		System.out.println(arr[0]);
		
		float sum = 0;
		for(int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		average = sum / sNum;
		System.out.println(String.format("%.2f", average));
	}
}

(1) 、(2)

G:单词分析

【问题描述】

       小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

       现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

【输入格式】

       输入一行包含一个单词,单词只由小写英文字母组成。

【输出格式】

       输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。

       第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。

【样例输入】

       lanqiao

【样例输出】

       a

       2

【样例输入】

       longlonglongistoolong

【样例输出】

       o

       6

【评测用例规模与约定】

       对于所有的评测用例,输入的单词长度不超过 1000。

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();
		int[] arr = new int[26];
//		Arrays.fill(arr, 10);
		char[] brr = s.toCharArray();
		for(int i = 0; i < brr.length; i++) {
			arr[brr[i] - 'a']++;
		}
		int max = arr[0];
		int j = 0;
		for(int i = 1; i < arr.length; i++) {
			if(arr[i] > max) {
				max = arr[i];
				j = i;
			}
		}
//		System.out.println('a');// a
//		System.out.println((int)'a');// 97
//		System.out.println(j + 'a');// 98
		System.out.println((char)(j + 'a'));// b
		System.out.println(max);
	}
}

(1)(2)(3)

猜你喜欢

转载自blog.csdn.net/m0_56426418/article/details/129941042