实验二 喜闻乐见的【手算题】
1、借助Excel进行计算
分数(2018年省赛)
如果不知道日期对应是星期几,比如较难知道1901年1月1日是星期几,可以利用Excel表格来解决这个问题:单元格先设置成日期格式,输入对应的日期,然后设置成星期形式
求两个日期之间的天数就是两个单元格做减法:
2、用Python算大数
即使参加java, 也要学一点python,python的代码一般较短,而且处理数字很方便
乘积尾零(2018年省赛)
使用Python进行可计算
3、用Python处理字符
3.1 平方和(2019年省赛)
解题思路:用Python,不用任何算法,直接把数字看成字符来统计
、
3.2 数列求值(2019年省赛)
思路:用求余数的方法只取后四位,使数字不会很大
3.3 数列求值(2019年省赛)
仍然用Python来解决:利用字符和列表等的强制转换
方法一:先打印出20210个字符,然后每拼一个数字,就把对应的卡片去掉
- 注意可以用乘法来重复列表中的字符串
- 看整型数中出现的
方法二:数字1用得最多,所以只用看数字1用的次数有没有达到2021次即可
Python中的count()方法:用于统计字符里某个字符出现的次数,语法如下:
str.count(sub,start=0,end=len(string))
sub: 搜索的子字符串
start: 字符串开始搜索的位置,默认为第一个字符
end:字符串中结束搜索的位置,默认为字符串最后一个位置
文档一:蓝桥杯省赛知识点
实验三:什么是算法复杂度
拿到题目后,第一步要分析的是:程序运行需要的计算时间和存储空间
O(nm)可以粗略的理解为运行次数是nxm
时间复杂度
在大O符号表示法中,时间复杂度的公式是:T(n)=O(f(n)),其中f(n)表示每行代码执行次数之和,而O表示正比例关系,这个公式的全称为:算法渐进时间复杂度
O(1+2n)=O(n)的原因是大O符号表示法并不是用于真实代表算法的执行时间的,是用来表示代码执行时间的增长变化趋势的。
常见的时间复杂度量级有:
- 常数阶O(1)
- 对数阶O(logN)
- 线性阶O(n)
- 线性对数阶O(nlogN)
- 平方阶O(n^2)
- 立方阶O(n^3)
- K次方阶O(n^k)
- 指数阶O(2^n)
上面从上到下依次的时间复杂度越来越大,执行效率越来越低
1. 常数阶O(1)
无论代码执行多少行,只要是没有循环等复杂结构,那这个diamante的时间复杂度就都是O(1)
这种代码消耗的时间不随某个变量的增长而增长,无论其有多长,即使几万几十万行,都可以用O(1)来表示它的时间复杂度
2. 对数阶O(logN)
循环时计数的参数在循环中进行了乘法或更高级的运算
3. 线性阶O(n):普通的循环n次
4. 线性对数阶O(nlogN)
如果时间复杂度为O(logN)的代码循环N遍的话,那么它的时间复杂度就是n*O(logN),也就是O(nlogN)
for(m=1; m<n; m++)
{
i = 1;
while(i<n)
{
i = i * 2;
}
}
5、平方阶O(n^2)
两层循环,若外层n,内层m,则时间复杂度为O(n*m);若内外层都是n,则时间复杂度为O(n^2)
6、立方阶O(n^3)、指数阶O(2^n):类似平方阶
空间复杂度
既然时间复杂度不是用来计算程序具体耗时的,那么类似的,空间复杂度也不是用来计算程序实际占用的空间的,空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,用S(n)来表示
空间复杂度常用的有:O(1),O(n),O(n^2)
1. 空间复杂度O(1)
如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常数,可表示为O(1)
2. 空间复杂度O(n)
平时写题多算算。