第十六届蓝桥杯大赛软件赛省赛Java 大学 A 组

📅 发布时间:2026/7/15 14:14:00 👁️ 浏览次数:
第十六届蓝桥杯大赛软件赛省赛Java 大学 A 组
题目链接Q1数位倍数简单Q22025简单Q3变换数组简单Q4最短距离简单算法原理Q1解法暴力枚举时间复杂度O(M)其中 M 202504思路很简单遍历每个数取出每一位相加只要累加和sum能被5整除就cnt最后打印一下cnt即可Q2解法暴力枚举时间复杂度O(M)其中 M 20250412思路很简单遍历每个数取出每一位如果是0、2或5就给对应计数然后判断一下是否满足cnt0≥1、cnt2≥2、cnt5≥1符合就及时cnt然后break最后打印cnt即可Q3解法模拟时间复杂度O (m×n)思路很简单就是模拟进行m次变换每次变换a[i]a[i]×Inetger.bitCount(a[i])易错点要按格式输出结果例如写成如下仅能通过10%测试用例for(int i0;in;i) System.out.print(a[i]);但写成如下就可通过100%测试用例for(int i0;in;i){ if(i0) System.out.print( ); System.out.print(a[i]); }Q4解法贪心时间复杂度O(nlogn)贪心原理“任何不按顺序配对的方案都可以通过调整得到一个总长度更小的方案”贪心结论“能连就连”这里我们避免了复杂的证明就拿一个典型的例子来形象的理解一下我们可以举个极端一点的例子下面0代表一单位距离Xᵢ 代表第 i 台显示器Yᵢ 代表第 i 台插座[0,0,X₁,0,0,Y₁,0,0,0,X₂,0,0,0,0,0,0,0,0,0,Y₂]非贪心情况X₁→Y₂X₂→Y₁此时会导致中间的0,0,0重复计算了两次贪心情况X₁→Y₁X₂→Y₂此时会导致中间的0,0,0直接被剩下了节省了6个单位长度因此最优贪心就是“能连就连”Java代码Q1import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan new Scanner(System.in); //在此输入您的代码... int cnt0; for(int i1;i202504;i){ int ti,sum0; while(t!0){ sum(t%10); t/10; } if(sum%50) cnt; } System.out.println(cnt); scan.close(); } }Q2import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan new Scanner(System.in); //在此输入您的代码... int cnt0; for(int i1;i20250412;i){ int ti,cnt00,cnt20,cnt50; while(t!0){ int curt%10; if(cur0) cnt0; else if(cur2) cnt2; else if(cur5) cnt5; t/10; if(cnt01cnt22cnt51){ cnt; break; } } } System.out.println(cnt); scan.close(); } }Q3import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan new Scanner(System.in); //在此输入您的代码... int nscan.nextInt(); int[] anew int[n]; for(int i0;in;i) a[i]scan.nextInt(); int mscan.nextInt(); for(int i0;im;i){ for(int j0;jn;j){ a[j]a[j]*Integer.bitCount(a[j]); } } for(int i0;in;i){ if(i0) System.out.print( ); System.out.print(a[i]); } scan.close(); } }Q4import java.util.Scanner; import java.util.Arrays; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner scan new Scanner(System.in); //在此输入您的代码... int nscan.nextInt(); int[] anew int[n]; int[] bnew int[n]; for(int i0;in;i) a[i]scan.nextInt(); for(int i0;in;i) b[i]scan.nextInt(); long sum0; //贪心遇到就连 Arrays.sort(a); Arrays.sort(b); for(int i0;in;i) sumMath.abs(a[i]-b[i]); System.out.println(sum); scan.close(); } }