我觉得还是好好掌握简单题,并总结一下题目的类型和知识点。因为我太菜了
借鉴别人的知识点蓝桥杯历年真题分类汇总(史上最全版本,一定不要错过)-CSDN博客
日期与时间问题,枚举(但是一般不会单着考,会结合set,map,最大公约数等) ,数学+思维+找规律,动态规划,字符串,全排列,最大公约数 ,排序(二分查找,快排,分治思想), DFS,BFS。最近几年会发现蓝桥杯题目越来越难,少了许多'暴力’,偏向于动态规划和数学思维,这种题目一般都是不简单的,不过没关系,填空题前几道还是比较偏向枚举的考察,不过要结合着set去重,二分查找,map,等技巧考,做几道真题就可以掌握八九不离十,、其次就是日期问题,还是屡见不鲜,我们可以借助excel和电脑自带计算器做.简单的题做对拿个省三是没问题的.其次就是要掌握一些回溯算法可以看我这篇博客回溯算法,实在不会做直接暴力搜索,可以得到部分分.还有就是全排列,最大公约数和最小公倍数,set去重,vector,map等STL容器.sort,max等algorithm等库里的常用函数,字符串和整数切换,大数相乘等技巧和模板要多记记,竞赛中很常见这样基本稳省二了.最后说一下,有余力的同学可以学一下DP算法,可以看一下这个视频DP分析法学会之后可以准备国赛了。
题目一 阶乘求和
【问题描述】
令 S = 1! + 2! + 3! + ... + 202320232023! ,求 S 的末尾 9 位数字。
提示:答案首位不为 0 。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
看到这么大的数字,想到用大数类BigInteger.仔细看题,要求S的末尾9位数字,那么极有可能这后9位比较特殊。
求阶乘:
int sum = 0;
int j = 1;
for(int i = 1; i <= 2; i++) {
j = j+i;// j = j * i;
sum += j;
}
System.out.println(sum);
大数类:
创建对象:
BigInteger big = new BigInteger("202320232023");
BigInteger big1 = BigInteger.valueOf(2023);//括号里式int或long型,不能超出范围
在for循环里面,我们要写i< 202320232023时,会出错,因为i时整形的,所以这里不能写202320232023,我们想到把i也转换成大数类,但是没有办法表示<,.....当我们不知道怎么办的时候,在读题,发现只要求末尾9位数字即可,猜想可能到某个数的阶乘之和之后末尾的九位数已经不再改变,所以开始尝试算阶乘,注意:用上面的求阶乘的z只能算到25的阶乘和,27的阶乘和就超过了整数的范围,所以我们要记住:40!以及40以后的阶乘后9位都是0.
所以,我们只需要算前39的阶乘和就可算出202320232023的阶乘和的末尾9位数字啦,然后我们用大数套用算阶乘的代码
大数中的运算:前提a和b得都是大数
加 a.add(b)
减 a.subtract(b)
乘 a.multiply(b)
除 a.divide(b)
比较大小 a.compareTo(b) a>b,返回正数,a<b,返回负数,a=b,返回0;
BigInteger.valueOf(i);可以将整数i转化成大数类型
代码:
package lan2023;
import java.math.BigInteger;
public class A阶乘求和 {
public static void main(String[] args) {
BigInteger sum = new BigInteger("0");
BigInteger j = new BigInteger("1");
for(int i = 1; i <= 39; i++) {
j = j.multiply(BigInteger.valueOf(i));
sum = sum.add(j);
}
System.out.println(sum);
}
}
运行结果: 20935051082417771847631371547939998232420940313
答案:420940313
题目二:幸运数字
【问题描述】
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整
数。例如 126 是十进制下的一个哈沙德数,因为 (126) 10 mod (1+2+6) = 0 ; 126
也是八进制下的哈沙德数,因为 (126) 10 = (176) 8 , (126) 10 mod (1 + 7 + 6) = 0 ;
同时 126 也是 16 进制下的哈沙德数,因为 (126) 10 = (7 e ) 16 , (126) 10 mod (7 +
e ) = 0 。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为
哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示
为: 1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数
字是多少?你只需要告诉小蓝这个整数的十进制表示即可。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
要找到第2023个幸运数字,我们想到可以用遍历直到找到第2023个幸运数字为止,在for循环里进行判断是时候,我们需要求当前遍历数的二进制、八进制、十进制、十六进制,此时我们可以编写一个方法来帮我们计算一下某个数的进制数各位和,注意不是求进制是几,我们需要传入两个参数当前的数,以及转换成几进制的,
标签:10,BigInteger,数字,考前,大数,一周,126,阶乘,ing From: https://blog.csdn.net/2301_76876837/article/details/137477786