赞
踩
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 += 1
- res = 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')

是我自己思考想出来的,算法的时间复杂度和解法可能不是最优的,这个题目也算是比较简单的,我最近做蓝桥杯的真题真的有点做不动了,都好难,感觉到最后都是数学问题,你需要根据给出的条件和给出的数据自己提取出数学模型来,对于我这种数学不好的人真的是非常不友好啊啊~但是我看了很多人说其实多刷题多总结题型会有帮助,我还是练习不够,需要再多加思考!多加练习!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。