蓝桥杯(Java) -day05

文章介绍了多个蓝桥杯Java编程竞赛的题目,包括裁纸刀问题、求和问题、排列字母、刷题统计、修剪灌木、顺子日期和纸张尺寸等。每个问题都提供了解题思路和对应的Java代码实现,旨在帮助参赛者理解和解决竞赛中的算法问题。
摘要由CSDN通过智能技术生成

1.蓝桥杯(Java) -day01
2.蓝桥杯(Java) -day02
3.蓝桥杯(Java) -day03
4.蓝桥杯(Java) -day04


一、裁纸刀

蓝桥杯-2023省赛模拟题-裁纸刀
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。

小蓝用一张纸打印出两行三列共 6 个二维码,至少使用九次裁出来,下图给出了一种裁法。

图片描述
在这里插入图片描述

在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁 4 次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。

如果小蓝要用一张纸打印出 20 行 22 列共 440 个二维码,他至少需要裁多少次?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

解题思路

裁剪次数=4+二维码个数-1

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
       System.out.println(443);
    }
}

二、求和

蓝桥杯-2023省赛模拟题-求和
问题描述
给定 n 个整数 ,求它们两两相乘再相加的和,即:

输入格式
输入的第一行包含一个整数 n。

输出格式
输出一个整数 SS,表示所求的和。请使用合适的数据类型进行运算。

样例输入

4
1 3 6 9

样例输出

117

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

解题思路

先求出前缀和,并存放在另一个数组中
a[i]乘以前缀和S[n]-S[i]

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
  public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n+1];
        long[] sum=new long[n+1];
        for (int i = 1; i <=n; i++) {
            a[i] = sc.nextInt();
            sum[i]=sum[i-1]+a[i];
        }
        long res = 0;
        for (int i = 1; i <= n; i++) {
            res+=a[i]*(sum[n]-sum[i]);
        }
        System.out.println(res);
    }
}

三、排列字母

蓝桥杯-2023省赛模拟题-排列字母

问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小蓝要把一个字符串中的字母按其在字母表中的顺序排列。

例如,LANQIAO 排列后为 AAILNOQ

又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY

请问对于以下字符串,排列之后字符串是什么?

WHERETHEREISAWILLTHEREISAWAY

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
         Scanner sc=new Scanner(System.in);
     char[] str=sc.nextLine().toCharArray();
     Arrays.sort(str);
     for(char c:str) {
         System.out.print(c);
     }
     
 }
}

四、刷题统计

蓝桥杯-2023省赛模拟题-刷题统计

问题描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 aa 道题目, 周六和周日每天做 bb 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 nn 题?

输入格式
输入一行包含三个整数 a, ba,b 和 nn.

输出格式
输出一个整数代表天数。

样例输入

10 20 99

样例输出

8

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

解题思路

这个题看着简单,暴力就超时
可以直接算用了多少整周
剩下的进行判断
最后加上整周的所有天数

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
  public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        long a=sc.nextLong();
        long b=sc.nextLong();
        long n=sc.nextLong();
        long res=0;
        long week=5*a+2*b;
        long time=n/week; //多少周
        long other=n%week;
        if(other==0) {
            System.out.println(7*time);
            return;
        }
        
        for(long i=1;;i++) {
            
            if(i%7==0||i%7==6) {
                res+=b;
            }else {
                res+=a;
            }
            if(res>=other) {
                System.out.println(i+7*time);
                return;
            }
        }
    }

}

五、修剪灌木

蓝桥杯-2023省赛模拟题-修剪灌木
问题描述
爱丽丝要完成一项修剪灌木的工作。

有 NN 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。

灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式
一个正整数 NN, 含义如题面所述。

输出格式
输出 NN 行, 每行一个整数, 第 ii 行表示从左到右第 ii 棵树最高能长到多高。

样例输入

3

样例输出

4
2
4

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

解题思路

看对应点的两边长度*2

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
   public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a=new int[n];
        for(int i=0;i<n;i++) {
            a[i]=2*Math.max(n-i-1,i);
            System.out.println(a[i]);
        }

    }

}

六. 顺子日期

蓝桥杯-2023省赛模拟题-顺子日期

问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。

例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。

小明想知道在整个 2022 年份中,一共有多少个顺子日期?

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

解题思路

知道还有其他的方法,但是记不住 一直用Calendar
这里需要注意Calendar的月份和天数 都是单数 ,格式不是yyyyMMdd, 所以用SimpleDateFormat 转化格式
其次 要注意 MM一定是大写 应为分钟是小写mm

解题代码

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Main {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Calendar date = Calendar.getInstance();
        date.set(2022, 0, 1);
        String[] str = { "012", "123", "234", "345", "456", "567", "678", "789" };
        int count = 0;
    
    while(date.get(Calendar.YEAR)==2022) {
        SimpleDateFormat form=new SimpleDateFormat("yyyyMMdd");
        String time=form.format(date.getTime());
        
        for(String s: str) {
            if(time.contains(s)) {
                count++;
                break;
            }
        }
        date.add(Calendar.DATE,1);
    }
    System.out.println(count);
    }
}

七. 纸张尺寸

蓝桥杯-2023省赛模拟题-纸张尺寸

问题描述
在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm \times× 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm \times× 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。

输入纸张的名称, 请输出纸张的大小。

输入格式
输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。

输出格式
输出两行,每行包含一个整数,依次表示长边和短边的长度。

样例输入1

A0

样例输出1

1189
841

解题思路

n为几就是循环几次
对长边除以2,然后长短进行交换

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        int n=Integer.parseInt(str.substring(1));
        int length=1189;
        int width=841;
        for(int i=0;i<n;i++) {
            int temp=Math.max(length,width)/2;
            length=width;
            width=temp;
        }
        System.out.println(length);
        System.out.println(width);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发还不秃的秃头程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值