【蓝桥杯】2023省赛真题详解(更新中)

🐏小怜怜的简介:

💖博客主页:浣熊小怜怜

🚀年龄:23 大三在读

💪爱好:干饭,运动,码代码,看书,音乐

🎉欢迎关注🔍点赞👍收藏🎇留言📙

🎄有任何疑问,欢迎留言讨论!!!

2023年第十四届蓝桥杯JavaB组省赛真题(题目+全部完整题解)_蓝桥杯java历年真题及答案整理(共100道-CSDN博客

2023年第十四届蓝桥杯省赛JavaB组个人题解(AK)_蓝桥杯题目java-CSDN博客

💕 Symbols (emojipedia.org)

🎈A:阶乘求和

🎈B: 幸运数字

🎈C: 数组分割

🎈D:矩形总面积

🎈E:蜗牛

🎈A:阶乘求和

本题总分:5分

🎯问题描述:

令 S = 1! + 2! + 3! + … + 202320232023! , 求 S 的末尾 9 位数字。 提示:答案首位不为 0 。

package pojo.LanQiao.day1;
​
import java.math.BigInteger;
import java.util.Scanner;
​
//令 S = 1! + 2! + 3! + … + 202320232023! ,
//        求 S 的末尾 9 位数字。
//        提示:答案首位不为 0 。
public class 阶乘求和01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        long n = scanner.nextLong();
        long sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += fun(i);
            sum %= 1e9;
            System.out.println(sum);
        }
    }
​
    public static long fun(long n) {
        if (n == 0 || n == 1) {
            return 1;
        } else {
            return (long) (fun(n - 1) * n % 1e9);
        }
    }
}

🎃题解分析: 官方的骗术 当加到40多的阶乘时,这个阶乘和后面的9位数就不会发生改变了。

🗯️计算时模1e9(10的9次方)可以缩小倍数,算出结果。

🎈B: 幸运数字

本题总分:5分

🎯问题描述:

哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整 数。例如 126 126126 是十进制下的一个哈沙德数,因为 ( 126 ) 10 m o d ( 1 + 2 + 6 ) = 0 (126){10} mod (1+2+6) = 0(126) 10mod(1+2+6)=0;126 126126 也是八进制下的哈沙德数,因为 ( 126 ) 10 = ( 176 ) 8 , ( 126 ) 10 m o d ( 1 + 7 + 6 ) = 0 (126){10} = (176)8,(126){10} mod (1 + 7 + 6) = 0(126) 10 =(176) 8 ,(126) 10 mod(1+7+6)=0; 同时 126 126126 也是 16 1616 进制下的哈沙德数,因为 ( 126 ) 10 = ( 7 e ) 16 , ( 126 ) 10 m o d ( 7 + e ) = 0 (126){10} = (7e){16},(126)_{10} mod (7 + e) = 0(126) 10 =(7e) 16 ,(126) 10mod(7+e)=0。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为 哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示 为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126... 1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . .1,2,4,6,8,40,48,72,120,126... 。现在他想知道第 2023 个幸运数 字是多少?你只需要告诉小蓝这个整数的十进制表示即可。

package pojo.LanQiao.day1;
​
//哈沙德数(126)10mod(1+2+6)=0;126 126126 也是八进制下的哈沙德数、
//第 2023 个幸运数 字是多少?
public class 幸运数字02 {
    public static void main(String[] args) {
        int n = 0;
        for (int i = 1; i < 100000000; i++) {
            if (fun(i)) {
                n++;
                if (n == 2023) {
                    System.out.println(i);
                    break;
                }
            }
        }
    }
​
    public static boolean fun(int n) {
        int sum = 0;
        int x = n;
        while (x != 0) {
            sum += x % 10;
            x /= 10;
        }
        if (n % sum != 0) {
            return false;
        }
        sum = 0;
        x = n;
        while (x != 0) {
            sum += x % 2;
            x /= 2;
        }
        if (n % sum != 0) {
            return false;
        }
        sum = 0;
        x = n;
        while (x != 0) {
            sum += x % 8;
            x /= 8;
        }
        if (n % sum != 0) {
            return false;
        }
        sum = 0;
        x = n;
        while (x != 0) {
            sum += x % 16;
            x /= 16;
        }
        if (n % sum != 0) {
            return false;
        }
        return true;
    }
}

215040

🎃题解分析: 这题就是考察大家的进制转换,数据量也不大。直接看代码吧!

🎈C: 数组分割

本题总分: 10 分

🎯问题描述:

小蓝有一个长度为 N 的数组 A = [ A 0 , A 1 , . . . , A N − 1 ] 。现在小蓝想要从 A 对应的数组下标所构成的集合 I = { 0 , 1 , 2 , . . . , N − 1 } 中找出一个子集 R 1 ,那么 R 1在 I 中的补集为 R 2 。记 S 1 = ∑ r ∈ R 1 A r , S 2 = ∑ r ∈ R 2 A r,我们要求 S 1 和 S 2 均为 偶数,请问在这种情况下共有多少种不同的 R 1。当 R1 或 R 2 为空集时我们将 S 1 或 S 2 视为 0。​

🎈D:矩形总面积

本题总分: 10 分

🎯问题描述:

平面上有个两个矩形R1和R2,它们各边都与坐标轴平行。设(x1 ,y1)和(x2, y2 )依次是R1的左下角和右上角坐标,(x3, y3)和(x4 ,y4)依次是R2的左下角和右上角坐标,请你计算R1和R2的总面积是多少?
注意:如果R1和R2有重叠区域,重叠区域的面积只计算一次。

package pojo.LanQiao.day1;

import java.util.Scanner;

public class 矩形总面积04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x1 = sc.nextInt();
        int y1 = sc.nextInt();
        int x2 = sc.nextInt();
        int y2 = sc.nextInt();
        int x3 = sc.nextInt();
        int y3 = sc.nextInt();
        int x4 = sc.nextInt();
        int y4 = sc.nextInt();
        long area1 = (long) (x2 - x1) * (y2 - y1);//s1
        long area2 = (long) (x4 - x3) * (y4 - y3);//s2
        long n = Math.min(x2, x4) - Math.max(x1, x3);
        long m = Math.min(y2, y4) - Math.max(y1, y3);
        long total = 0;
        if (n >= 0 && m >= 0) {
            total = n * m;
        }
        long result = area1 + area2 - total;
        System.out.println(result);
    }
}

🎃题解分析:

这题有两种解法,自己数组去求,但是可能数据量过大会爆栈。第二种就是公式直接求解,这时求两个矩形相交的面积改怎么求?

矩形相交要使条件成立,即min(x2,x4)-max(x1,x3)>=0 且min(y2,y4)-max(y1,y3)>=0

如果条件成立,则相交矩形面积为:(min(x2,x4)-max(x1,x3))* (min(y2,y4)-max(y1,y3))

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值