🐏小怜怜的简介:
💖博客主页:浣熊小怜怜
🚀年龄:23 大三在读
💪爱好:干饭,运动,码代码,看书,音乐
🎉欢迎关注🔍点赞👍收藏🎇留言📙
🎄有任何疑问,欢迎留言讨论!!!
2023年第十四届蓝桥杯JavaB组省赛真题(题目+全部完整题解)_蓝桥杯java历年真题及答案整理(共100道-CSDN博客
2023年第十四届蓝桥杯省赛JavaB组个人题解(AK)_蓝桥杯题目java-CSDN博客
💕 Symbols (emojipedia.org)
🎈A:阶乘求和
🎈B: 幸运数字
🎈C: 数组分割
🎈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);}}
}
420940313
🎃题解分析: 官方的骗术 当加到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。