2024第15届蓝桥杯javab组复盘
第一题 报数
纯暴力for循环,然后也知道给我4小时也跑不出来,所以不会做了
第二题 类斐波那契额循环数
考模拟,答案:7913837
5分到手
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
for(int i=(int)1e7;i>=1;i--)
{
Deque<Integer> deque=new ArrayDeque<>();
int sum=0,a=i;
while(a>0){
int m=a%10;
a/=10;
sum+=m;
deque.addFirst(m);
}
while(sum<=i){
if(sum==i)
{
System.out.println(i);
return;
}else{
deque.add(sum);
sum*=2;
sum-=deque.poll();
}
}
}
}
}
第三题 分布式队列
这题应该能过大部分样例吧
import java.util.Scanner;
public class Main3 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int a=0;
int[] b=new int[n];
while(true){
String s=scanner.next();
if(s.equals("add")){
int val=scanner.nextInt();
a++;
}else if(s.equals("sync")){
int val=scanner.nextInt();
b[val]++;
}else{
int min=Integer.MAX_VALUE;
for(int i=1;i<n;i++){
min=Math.min(min,b[i]);
}
System.out.println(min);
}
}
}
}
第四题 食堂
这题和去年的飞机降落有点像又不太像,总觉得太麻烦了我就没去多想,直接big胆骗分,下面是我的骗分伪代码(能过1个样例就满足了)
int sum1=总人数
int sum2=总座位数
if(sum1>sum2) print(sum2)
else print(sum1)
第五题 最优分组
纯纯考数学题,数学期望?我直接不会,猜测答案区间范围直接输出打印
第六题 星际旅行
又是期望值,我的写法是floyd算法,一个传送门的距离算作1,算出每个点之间的最短传送门距离就好做了,这应该是正解?
import java.util.Arrays;
import java.util.Scanner;
public class Main6 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int m=scanner.nextInt();
int q=scanner.nextInt();
int[][] map=new int[n+1][n+1];
for(int i=1;i<=n;i++)
{
Arrays.fill(map[i],Integer.MAX_VALUE/3);//除以3避免溢出;
}
for(int i=0;i<m;i++)
{
int a=scanner.nextInt();
int b=scanner.nextInt();
map[a][b]=1;
map[b][a]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
map[i][j]=Math.min(map[i][j],map[i][k]+map[k][j]);
}
}
}
double res=0;
for(int i=0;i<q;i++)
{
int begin=scanner.nextInt();
int door=scanner.nextInt();
int s=1;//包含起点
for(int j=1;j<=n;j++)
{
if(map[begin][j]<=door){
s++;
}
}
res+=s;
}
res/=q;
System.out.printf("%.2f",res);
}
}
第七题 LITS游戏
这题是个dfs题,当时感觉条件太多了,一看就不会,采取了骗分的方法,因为t<=10,然后答案只会是Yes和No,所以我觉得可以骗,下面是骗分伪代码
int sum=矩阵1的总数
int sum2=16//4种字母的面积
if(sum<sum2)
print("No")
else
Random random=new Random()
int a=random.nextInt(2)
if(a==1)
print("Yes")
else print("No")
第八题 拼十字
最后一题比前面简单,幸好没死磕前面不会的题
import java.util.Scanner;
public class Main8 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int[] l=new int[n];
int[] w=new int[n];
int[] c=new int[n];
for(int i=0;i<n;i++)
{
l[i]=scanner.nextInt();
w[i]=scanner.nextInt();
c[i]=scanner.nextInt();
}
int res=0;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(c[i]!=c[j] && ((l[i]> l[j] && w[i]<w[j]) || (l[i]<l[j] && w[i]>w[j]))){
res++;
res%=(1e9+7);
}
}
}
System.out.println(res%(1e9+7));
}
}
想问一下大家,我这水平能省一吗
最后十字架你输出的是double类型的,很可惜啊
有希望hh
https://www.acwing.com/file_system/file/content/whole/index/content/11838253/
我的分享大家可以参考
while(true)?
星球那个没读懂题👿,list那个不会,最后一题我写的树状数组应该是正解,食堂那个我暴力把寝室可以组合的数量求出来排个序,二分找一个小于食堂座位的最大值
问一下java要手动scan.close吗
可以