当前位置:   article > 正文

2023年第十四届蓝桥杯Java B组个人题解(填空题)_蓝桥杯java组有填空题吗

蓝桥杯java组有填空题吗

说在前面

大学生涯中第一次参加蓝桥杯,赛前也刷了部分题(简单的枚举,模拟,贪心,dfs等)。但结果却不太理想,还是好几题不会(太菜了5555555555大佬勿喷)

不过讲真eclipse是真难用,习惯了IDEA的快捷键和补全的同学建议在赛前复习一下eclipse的使用。

下面和大家分享一下两道最简单的(我是这么认为的)填空题题解。

试题A:阶乘求和

问题描述
  令 S = 1! + 2! + 3! + … + 202320232023!,求 S 的末尾 9 位数字。
  提示:答案首位不为 0。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

看到这题的数据就秒想到BigInteger,奈何在考场上已经忘了BigInteger的用法了。。。。。。。。我们当然不能直接算出S的最后结果并取余,那不仅爆long,甚至爆BigInteger了。。

第一种解法:

  1. public class A {
  2. //全局变量temp用于随时对大数取余
  3. static long temp=1000000000;
  4. public static void main(String[] args) {
  5. long sum=0;
  6. //尝试找出前100个数的阶乘和后就位是否有规律
  7. for (int i = 1; i <= 100; i++) {
  8. sum=(sum+digui(i))%temp;
  9. System.out.println(i+"的阶乘和为"+sum);
  10. }
  11. }
  12. public static long digui(long a){
  13. if(a==0 || a==1){
  14. return 1;
  15. }
  16. //在考虑此阶乘可能爆long的同时也要考虑前阶乘数*此数也有爆long的可能性
  17. return ((digui(a-1)%temp)*a)%temp;
  18. }
  19. }

最后我们发现:

  1. 1的阶乘和为1
  2. 2的阶乘和为3
  3. 3的阶乘和为9
  4. 4的阶乘和为33
  5. 5的阶乘和为153
  6. 6的阶乘和为873
  7. 7的阶乘和为5913
  8. 8的阶乘和为46233
  9. 9的阶乘和为409113
  10. 10的阶乘和为4037913
  11. 11的阶乘和为43954713
  12. 12的阶乘和为522956313
  13. 13的阶乘和为749977113
  14. 14的阶乘和为928268313
  15. 15的阶乘和为602636313
  16. 16的阶乘和为392524313
  17. 17的阶乘和为820620313
  18. 18的阶乘和为526348313
  19. 19的阶乘和为935180313
  20. 20的阶乘和为111820313
  21. 21的阶乘和为821260313
  22. 22的阶乘和为428940313
  23. 23的阶乘和为405580313
  24. 24的阶乘和为844940313
  25. 25的阶乘和为828940313
  26. 26的阶乘和为412940313
  27. 27的阶乘和为180940313
  28. 28的阶乘和为684940313
  29. 29的阶乘和为300940313
  30. 30的阶乘和为780940313
  31. 31的阶乘和为660940313
  32. 32的阶乘和为820940313
  33. 33的阶乘和为100940313
  34. 34的阶乘和为620940313
  35. 35的阶乘和为820940313
  36. 36的阶乘和为20940313
  37. 37的阶乘和为420940313
  38. 38的阶乘和为620940313
  39. 39的阶乘和为420940313
  40. 40的阶乘和为420940313
  41. 41的阶乘和为420940313
  42. 42的阶乘和为420940313
  43. 43的阶乘和为420940313
  44. 44的阶乘和为420940313
  45. 45的阶乘和为420940313
  46. 46的阶乘和为420940313
  47. 47的阶乘和为420940313
  48. 48的阶乘和为420940313
  49. 49的阶乘和为420940313
  50. 50的阶乘和为420940313

39及以后数字的阶乘和后九位均为420940313,所以最终答案就是420940313。

第二种解法(直接开BigInteger)

  1. import java.math.BigInteger;
  2. public class A {
  3. public static void main(String[] args) {
  4. BigInteger a = new BigInteger("1");
  5. BigInteger ans = new BigInteger("0");
  6. for (int i = 1; i <= 50; i++) {
  7. a = a.multiply(new BigInteger("" + i));
  8. ans = ans.add(a);
  9. System.out.println(i + "的阶乘和后9位为" + ans.mod(new BigInteger("1000000000")));
  10. }
  11. }
  12. }

试题B:幸运数字

问题描述
  哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。例如 126 是十进制下的一个哈沙德数,因为 (126)10 mod (1+2+6) = 0;126也是八进制下的哈沙德数,因为 (126)10 = (176)8,(126)10 mod (1 + 7 + 6) = 0;同时 126 也是 16 进制下的哈沙德数,因为 (126)10 = (7e)16,(126)10 mod (7 + e) = 0。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数字是多少?你只需要告诉小蓝这个整数的十进制表示即可。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

这道题考察的是进制转换,会调用API就可以。

十进制转二进制:Integer.toBinaryString(i)
十进制转八进制:Integer.toOctalString(i)
十进制转十六进制:Integer.toHexString(i)

当然也可以用

  Integer.toString(n,2)
  Integer.toString(n,8)
  Integer.toString(n,16)

  1. public class B {
  2. public static void main(String[] args) {
  3. int count = 0;
  4. int index = 1;
  5. while (true) {
  6. String s2 = Integer.toBinaryString(index);//转换二进制
  7. String s8 = Integer.toOctalString(index);//转换八进制
  8. String s16 = Integer.toHexString(index);//转换十六进制
  9. //判断是否都能整除(不要忘了自己本身)
  10. if (index % getSum(s2) == 0 && index % getSum(s8) == 0 && index % getSum(s16) == 0 && index % getSum("" + index) == 0) {
  11. count++;
  12. }
  13. if (count == 2023) {
  14. System.out.println("第2023个幸运数字是" + index);
  15. break;
  16. }
  17. index++;
  18. }
  19. }
  20. public static int getSum(String str) {
  21. int sum = 0;
  22. char chars[] = str.toCharArray();
  23. //在转十六进制时需要注意对字母的处理
  24. for (int i = 0; i < chars.length; i++) {
  25. if (chars[i] >= 'a' && chars[i] <= 'f') {
  26. sum += (chars[i] - 'a' + 10);
  27. } else {
  28. sum += chars[i] - '0';
  29. }
  30. }
  31. return sum;
  32. }
  33. }

希望本章能对大家有所帮助~

如有错误,欢迎评论区指正!!
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/488855
推荐阅读
相关标签
  

闽ICP备14008679号