备战蓝桥杯Day34 - 每日一题

题目描述

 解题思路

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')

总结

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

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值