2024年蓝桥杯python研究生组--砍柴题

题目:

解题意思:小蓝和小乔砍柴,小蓝先砍,所以主动权在小蓝手里,小蓝可以分析砍多少的质数段能让他赢,如果没有这个质数,则小乔赢。这就是博弈题思想,双方都会优先考虑砍多少,才能让自己受益最大即赢。这就是一刀定胜负的游戏。

编程(个人理解手写的,不代表官方答案):

import math
# 直接定义列表a,其中索引是树的大小,值是0或1 表示小蓝或小乔赢
a = [0 for i in range(10001)]
# 定义一个质数函数,用于判断该数是否为一个质数
def zhishu(x):
    h = int(math.sqrt(x))
    if x == 1:
        return 0
    for i in range(2, h+1):
        if x % i == 0:
            return 0
    return 1
# 定义一个砍树函数,用于把a列表里的值填满,从树的长度为0 到 10001,不断判断是谁赢
def kanshu ():
    for i in range(1001):
        if i == 1 or i == 0:
            a[i] = 0
        else:
            if zhishu(i):
                a[i] = 1
            else:
                for j in range(i-1, 2 , -1):
                    if zhishu(j) and a[i-j] == 0:
                        a[i] = 1
kanshu()
# 输入
t = int(input())
for i in range(t):
    x = int(input())
    print(a[x])

如果不懂可以输出一下列表a并自己在草稿纸上操作一下。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值