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

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();

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值