蓝桥杯软件类竞赛 │ 手算题攻略( 三 )


题目描述:整个20世纪(1901年1月1日至2000年12月31日之间) , 一共有多少个星期一?
用Excel , 一个格子输入日期1901年1月1日 , 另一个格子输入2000年12月31日 , 然后两个格子相减得36524天 , 除以7得5217.7周 。
蓝桥杯软件类竞赛 │ 手算题攻略
本文插图
■图(1) 日期做减法
再用excel点2000年12月31日的属性 , 选星期 , 得“星期日” , 说明答案就是5217 。
蓝桥杯软件类竞赛 │ 手算题攻略
本文插图
■图(2) 查看日期是星期几
04
【蓝桥杯软件类竞赛 │ 手算题攻略】 巧用Python
Python处理数字非常简单 , 遇到这样的填空题 , 可以用Python 。
即使是参加C/C++、Java组比赛 , 也要学一些Python , 以方便手算 。
Python的代码长度一般比C/C++、Java短很多 , 例如30行的C++代码 , 用Python写只需要20行 。
01.
用Python算大数
题目来源:2018年度C++ A组 , 试题3: 乘积尾零
题目描述:给100个整数 , 问它们乘积的末尾有多少个零 。
遇到大数的问题 , 用Python处理是最简单的 , 可以直接硬算 。
不过 , 其实Python的大数也不是无限大的 , 下面的代码 , 如果一股脑先算出所有的100个数的乘积s , s实在太大了 , 也是会溢出的 。 所以乘一个数 , 就看乘积s后面有没有0 , 如果有0就除以10 , 这样s就比较小了 。
下面是“乘积尾零”问题的代码 。
#输入放在一行中 , 不要分 10行
num=[ int(i) fori in input. split]
# input. split读一行以空格分开的元素,然后用 int转为整数
s = 1
cnt = 0
fori in range( len(num)): #连续乘 , 一边乘一边统计 0的个数
s *= num[i] #乘一个数
whiles% 10== 0: #末尾是零
s /= 10#除以 10 , 把末尾零去掉
cnt += 1
print(cnt)
02.
用Python处理字符
题目来源:2019年度C++ A组 , 试题1: 平方和
题目描述:小明对数位中含有2、0、1、9 的数字很感兴趣 , 在1 到40 中这样的数包
括1、2、9、10 至32、39 和40 , 共28 个 , 他们的和是574 , 平方和是14362 。
注意 , 平方和是指将每个数分别平方后求和 。
请问 , 在1 到2019 中 , 所有这样的数的平方和是多少?
用Python , 不用任何算法 , 直接把数字看成字符来统计:
sum = 0
sum += i*i
print(sum)
下面是Python代码 , 直接算 , 非常简单:
a, b, c= 1, 1, 1
fori in range( 4, 20190325):
y=( a+ b+ c)% 10000
a= b
b= c
c= y
print( y)
03.
2021年省赛新题
用Python硬搞 , 简单直接!
先打印出20210个字符 , 然后每拼一个数字 , 就把对应的卡片去掉 。