蓝桥打卡-day10

打卡贴:第十四届蓝桥杯三月真题刷题训练——第 10 天(3.13)-CSDN社区

明天和意外谁先到无法预知,有钱不一定快乐、快乐不一定需要钱

题1、裁纸刀 - 蓝桥云课 (lanqiao.cn)

问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。
小蓝用一张纸打印出两行三列共 6 个二维码,至少使用九次裁出来,下图给出了一种裁法。
蓝桥打卡-day10_第1张图片
在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁 4 次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。
如果小蓝要用一张纸打印出 20 行 22 列共 440 个二维码,他至少需要裁多少次?
运行限制
最大运行时间:1s
最大运行内存: 256M
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        System.out.println(4 + 19 +21 * 20);
        scan.close();
    }
}

题2、刷题统计 - 蓝桥云课 (lanqiao.cn)

问题描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a,bn.
输出格式
输出一个整数代表天数。
样例输入
10 20 99
样例输出
8
评测用例规模与约定
对于 50%50% 的评测用例, 1≤1061≤a,b,n≤106 .
对于 100%100% 的评测用例, 1≤10181≤a,b,n≤1018 .
运行限制
最大运行时间:1s
最大运行内存: 256M

题解:(细节)

本题顺着暴力思路就可以、但是这是应用题,对于某一些案例来说暴力会超时,数据可能超出int;

每个星期都是重复一样的题数,可以用(总题数/每个星期的题数)*7 就只剩下一个星期的题数;

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

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        //根据题目给出的范围 当数值过大时暴力可能超时、某些案例过不去
        long a = scan.nextLong();
        long b = scan.nextLong();
        long n = scan.nextLong();
        long s = (n / (a*5 + b*2)) * 7;
        n %= (a*5 + b*2);
        for(int i =1 ;n>0&&i<=5 ;i++){
          n-=a;
          s++;
        }
        for(int i = 1; n>0 && i<=2 ; i++){
          n-=b;
          s++;
        }
        System.out.println(s);
        scan.close();
    }
}

题3、修剪灌木 - 蓝桥云课 (lanqiao.cn)

问题描述
爱丽丝要完成一项修剪灌木的工作。
有 �N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N, 含义如题面所述。
输出格式
输出 �N 行, 每行一个整数, 第 �i 行表示从左到右第 �i 棵树最高能长到多高。
样例输入
3
样例输出
4
2
4

题解、借大佬的一个图片

蓝桥打卡-day10_第2张图片
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int N = scan.nextInt();
        for(int i = 1 ; i <= N ; i++){
          int max = Math.max(N-i , i-1);
          System.out.println(max*2);
        }
        scan.close();
    }
}

题4、k倍区间 - 蓝桥云课 (lanqiao.cn)

题目描述
给定一个长度为 �N 的数列,�1,�2,⋯��A1 ,A2 ,⋯A N ,如果其中一段连续的子序列 ��,��+1,⋯��A i ,A i +1,⋯A j ( �≤�ij ) 之和是 �K 的倍数,我们就称这个区间 [�,�][i,j] 是 K 倍区间。
你能求出数列中总共有多少个 �K 倍区间吗?
输入描述
第一行包含两个整数 �N 和 �K( 1≤�,�≤1051≤N,K≤105 )。
以下 N 行每行包含一个整数 ��A i ( 1≤��≤1051≤A i ≤105 )
输出描述
输出一个整数,代表 K 倍区间的数目。
输入输出样例
示例
输入
5 2
1
2
3
4
5
输出
6

题解:

当 x % k == 0 将他单个数据记录 ans++

当 x % k == 0 假如有俩个就可以组合一下 (2 * (2-1))/2

当 x % k == 1 假如有三个,一样的道理 (3 * (3 - 1))/2

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 k = sc.nextInt();
        long[] arr = new long[k];
        long sum = 0 ;
        for(int i = 0 ; i < n ;i++){
          sum += sc.nextInt();
          arr[(int)(sum % k)]++;
        }
        long ans = arr[0];
        for(long i : arr){
          ans += i * (i-1)/2;
        }
        System.out.println(ans);
    }
}

AC截图:

蓝桥打卡-day10_第3张图片
蓝桥打卡-day10_第4张图片
蓝桥打卡-day10_第5张图片
蓝桥打卡-day10_第6张图片

你可能感兴趣的:(蓝桥,蓝桥杯,java)