第十二届蓝桥杯省赛Java-大学B组解析

A:ASC

第十二届蓝桥杯省赛Java-大学B组解析_第1张图片

package12;

import java.util.Scanner;

/**
 * @author: DreamCode
 * @file: C_直线.java
 * @time: 2022年2月10日-上午11:37:43
 */
class A_ASC {
	public static void main(String[] args) {
		int a = 'L';
		System.out.println(a);
		//答案 76
	}

}

B:卡片

第十二届蓝桥杯省赛Java-大学B组解析_第2张图片

package12;

import java.util.Arrays;
import java.util.Iterator;

/**
 * @author: DreamCode
 * @file: C_直线.java
 * @time: 2022年2月10日-上午11:37:43
 */
public class B_卡片 {
	static int[] num_resolve(int num) {
		String[] string = (String.valueOf(num)).split("");
		int[] record = new int[string.length];
		for (int i = 0; i < string.length; i++) {
			record[i] = Integer.valueOf(string[i]);
		}
		return record;
	}
	static int[] cards=new int[10];
	public static void main(String[] args) {
		Arrays.fill(cards,2021);
		int num=1;
		while(true) {
			int[] record = num_resolve(num);
			for (int i = 0; i < record.length; i++) {
				if(cards[record[i]]==0) {
					System.out.println(num-1);
					return;
				}else {
					cards[record[i]]--;
				}
			}
			num++;
		}
		// 答案:3181
		
	}
}


C:直线

第十二届蓝桥杯省赛Java-大学B组解析_第3张图片

package12;

import java.util.HashSet;
import java.util.Iterator;

/**
 * @author: DreamCode
 * @file: C_直线.java
 * @time: 2022年2月10日-上午11:37:43 
 * @思路:
 * 1.暴力枚举每一个点;
 * 2.将任意两个点的组合考虑是否存在这样一条不重复直线(注意区分斜率是否存在);
 * 3.采用HashSet存储每一条直线的k(分数)与b(分数)
 */
public class C_直线 {
	static HashSet<String> record = new HashSet<>();

	static int gcd(int a, int b) {
		return b == 0 ? a : gcd(b, a % b);
	}

	public static void main(String[] args) {
		for (int x1 = 0; x1 < 20; x1++) {
			for (int y1 = 0; y1 < 21; y1++) {
				for (int x2 = 0; x2 < 20; x2++) {
					for (int y2 = 0; y2 < 21; y2++) {
						int ky = y2 - y1;
						int kx = x2 - x1;
						if(kx==0) {
							//斜率不存在的情况
							record.add(" " + x1);
							continue;
						}
						int flagK = gcd(ky, kx); //化简分子分母
						String k = ky/flagK + "/" + kx/flagK;
						int by = y2*kx -x2*ky;
						int bx = kx;
						int flagB = gcd(by, bx);
						String b = by/flagB + "/" + bx/flagB;
						String line = k + "-" + b;
						record.add(line);
					}
				}
			}
		}

		System.out.println(record.size());
	}
// 答案:40257

}

D:货物摆放

第十二届蓝桥杯省赛Java-大学B组解析_第4张图片

package12;

/**
 * @author: DreamCode
 * @file: D_货物摆放.java
 * @time: 2022年2月10日-下午2:14:07
 * @思路:
 * 1.a、b、c 代表长宽高
 * 2.如果有任意两个相同,那么有三种组合情况
 * 3.如果三个相同,那么只有一种组合情况
 * 4.如果三者都不相同,则有6种组合情况
 * 5.暴力枚举,枚举过程始终满足a<=b<=c
 */
public class D_货物摆放 {
	
	public static void main(String[] args) {
		long num = 2021041820210418L;
		int count = 0;
		for (int a = 1; a <= Math.sqrt(num); a++) {
			if(num%a==0) {
				long n1=num/a;
				for(int b=a;b<=Math.sqrt(n1);b++) {
					if(n1%b==0) {
						long c = n1/b;
						if(c>=b&&b>=a) {
							if(c>b&&b>a) {
								count+=6;
							}else if (a==b&&b==c) {
								count+=1;
							}else {
								count+=3;
							}
						}
					}
				}
			}
		}
		System.out.println(count);
		// 答案:2430
	}
}


E:路径

第十二届蓝桥杯省赛Java-大学B组解析_第5张图片

package12;

import java.util.Arrays;

/**
 * @author: DreamCode
 * @file: E_最短路径.java
 * @time: 2022年2月10日-下午2:43:34
 * @思路:
 * 1.遍历1到2021,将存在路径的两点储存在二维数组中
 * 2.迪杰斯特拉求端点最短路径
 */
public class E_最短路径 {
	static private int gcd(int a, int b) {
		return b == 0 ? a : gcd(b, a % b);
	}

	static private int lcm(int a, int b) {
		return a / gcd(a, b) * b;
	}

	public static void main(String[] args) {
		boolean[] vis = new boolean[2025];
		int[] d = new int[2025];
		Arrays.fill(d, Integer.MAX_VALUE);
		int[][] edge = new int[2025][2025];
		for (int i = 0; i < edge.length; i++) {
			Arrays.fill(edge[i], Integer.MAX_VALUE);
		}
		for (int i = 1; i <= 2021; i++) {
			edge[i][i] = 0;
			for (int j = i + 1; j <= Math.min(i + 21, 2021); j++) {
				edge[i][j] = edge[j][i] = lcm(i, j);
			}
		}

		d[1] = 0;
		for (int i = 1; i < 2021; i++) {
			int x = 0;
			for (int j = 1; j < 2021; j++) {
				if (!vis[j] && d[j] < d[x]) {
					x = j;
					vis[j] = true;
				}	
			}
			for (int j = Math.max(1, x - 21); j <= Math.min(x + 21, 2021); j++) {
				d[j] = Math.min(d[j], edge[x][j] + d[x]);
			}
		}

		System.out.println(d[2021]);
	}
	//答案:10266837
}


F:时间提示

第十二届蓝桥杯省赛Java-大学B组解析_第6张图片

package12;

import java.math.BigInteger;
import java.util.Scanner;

/**
 * @author: DreamCode
 * @file: F_时间显示.java
 * @time: 2022年2月10日-下午5:46:37
 */
public class F_时间显示 {
	static Scanner scanner = new Scanner(System.in);

	public static void main(String[] args) {
		long us = scanner.nextLong();
		long second = us/1000;
		long minute = second/60;
		long hour = minute/60;
		System.out.printf("%02d:%02d:%02d",hour%24,minute%60,second%60);
	}

}

G:最少砝码

第十二届蓝桥杯省赛Java-大学B组解析_第7张图片

package12;

import java.util.Scanner;

/**
 * @author: DreamCode
 * @file: G_最少砝码.java
 * @time: 2022年2月10日-下午6:58:05
 * @思路:每当必须增加一个砝码时,需要增加的砝码大小为 3^n次幂
 */
public class G_最少砝码 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int N = scanner.nextInt();
		int count=1;
		int weight=1;
		int total=1;
		while(total<N) {
			count+=1;
			weight*=3;
			total=total+weight;
		}
		System.out.println(count);
	}

}

H:杨辉三角

第十二届蓝桥杯省赛Java-大学B组解析_第8张图片

package12;

import java.util.Scanner;

/**
 * @author: DreamCode
 * @file: H_杨辉三角.java
 * @time: 2022年2月11日-下午5:03:34
 * @思路:
 * https://blog.csdn.net/qq_55668645/article/details/121671280
 */
public class H_杨辉三角 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		long n = scan.nextLong();// 输入值,查找
		long[] arr = new long[44725];
		arr[0] = 1;
		long k = 1L;// k来定义位置
		if (n == 1) {
			System.out.println(1);
			return;
		}
		for (int i = 1; i < 44725; i++) {
			for (int j = i; j >= 1; j--) {
				arr[j] += arr[j - 1];// 换行后,用自己进行运算,减少内存
				if (arr[j] == n) {
					System.out.println(k + i - j + 1);
					return;// 如果找到了就结束
				}
			}
			k += (i + 1);
		}
		System.out.println(((1 + n) * n / 2) + 2);
	}
}

I:双向排序

第十二届蓝桥杯省赛Java-大学B组解析_第9张图片


你可能感兴趣的:(蓝桥杯历届真题,java,蓝桥杯,开发语言)