题目描述
解题思路
1.输入数据n,并将字符串类型转换成整数类型
2.求出输入n是2的几次幂(调用math库中的求对数的方法),在下面的循环中要用到
3.定义sum和,将抽取到的牌的总数加起来存储
4.count =0 # 记录 2 的第几次幂
5。通过循环,计算所有抽取到的牌数的总和,并得出抽到第几轮了,将输入数值减去已经加和的数值。
6.对所有的情况进行判断,并输出谁是最后抽牌的,谁就是最后的赢家。
代码实现
import math
n = int(input()) # 输入数据
num = round(math.log2(n)) # 求出输入n是2的几次幂,在下面的循环中要用到
sum = 0 # 定义sum和,将抽取到的牌的总数加起来存储
count =0 # 记录 2 的第几次幂for exp in range(num): # 循环输入数据n有的几个2次幂i = 2 ** exp # 计算二次幂 1.2.4.8.16...sum += i # 将所有的数据加和 就是 1+2+4+8+16+...count += 1res = n - sum # 计算输入数据n减去所有2次幂的和,剩下的数值
# print(sum)
# print(count) # 这些都是中间打印出来查看结果方便写出后续代码的
# print(res)
# print(count % 2)
if res <= 0 and count % 2 == 0: # 剩下的这些就是情况列举,你自己算算应该可以看懂print('hua')
elif res <= 0 and count % 2 == 1:print('ming')
elif res > 0 and count % 2 == 0:print('ming')
else:print('hua')
总结
是我自己思考想出来的,算法的时间复杂度和解法可能不是最优的,这个题目也算是比较简单的,我最近做蓝桥杯的真题真的有点做不动了,都好难,感觉到最后都是数学问题,你需要根据给出的条件和给出的数据自己提取出数学模型来,对于我这种数学不好的人真的是非常不友好啊啊~但是我看了很多人说其实多刷题多总结题型会有帮助,我还是练习不够,需要再多加思考!多加练习!