天假之名 发表于 2020-4-6 10:31:28

python 数学问题2

两人从1开始轮流数数,最少数1个数,最多数3个数,谁数到30谁赢,怎么数?
这道题用python可以解吗?
诚问各位大佬{:10_333:}

抛弃大学 发表于 2020-4-6 10:41:21

写两个循环遍历应该很简单就实现了,数数可以用random模块引入,不难的

天假之名 发表于 2020-4-6 10:41:44

有人能解答一下吗

天假之名 发表于 2020-4-6 10:43:05

抛弃大学 发表于 2020-4-6 10:41
写两个循环遍历应该很简单就实现了,数数可以用random模块引入,不难的

我知道,主要是输出有困难

天假之名 发表于 2020-4-6 10:57:08

是这个问题太难了吗

x-Aaron 发表于 2020-4-6 11:05:11

如果是4的话,第二个人一定输, 也就是说要在对手说数字之前把数字维持在4的倍数(应该是这样{:10_257:})

天假之名 发表于 2020-4-6 11:06:59

x-Aaron 发表于 2020-4-6 11:05
如果是4的话,第二个人一定输, 也就是说要在对手说数字之前把数字维持在4的倍数(应该是这样)

第一个人要赢就要出2吧

x-Aaron 发表于 2020-4-6 11:15:43

天假之名 发表于 2020-4-6 11:06
第一个人要赢就要出2吧

是的

x-Aaron 发表于 2020-4-6 11:16:52

天假之名 发表于 2020-4-6 11:06
第一个人要赢就要出2吧

30对4取余是2

天假之名 发表于 2020-4-6 11:21:07

x-Aaron 发表于 2020-4-6 11:16
30对4取余是2

这样的话我就有思路了

x-Aaron 发表于 2020-4-6 11:28:39

天假之名 发表于 2020-4-6 11:21
这样的话我就有思路了

{:10_257:}

天假之名 发表于 2020-4-6 11:30:41

x-Aaron 发表于 2020-4-6 11:28


我马上就写好了

x-Aaron 发表于 2020-4-6 11:43:38

def is_right(b):
    b_ = int(b)
    if b_ > 0 and b_ < 4:
      return b_
    else:
      while True:
            b = input('请输入1-3之间的数字:')
            b_ = int(b)
            if b_ > 0 and b_ < 4:
                return b_


            
def Fun(number = 10):
    Temp = number
    sum_ = 0
    a = 0#程序
    b = 0#玩家
    if number % 4 != 0:#如果不是4的倍数
      a = number % 4
      print('a:', a)
      sum_ += a
      if (sum_ >= Temp):#判断是否python赢了
            return False
      number -= a
      print("目前总和为:", sum_)
      print('剩余:', number)
    else:#如果一开始就是4的倍数
      while True:
            a = 1
            
            if number % 4 != 0:#如果对面失误
                a = number % 4
                sum_ += a
                if (sum_ >= Temp):#判断是否python赢了
                  return False
                number -= a
                print('a:', a)
                print("目前总和为:", sum_)
                print('剩余:', number)
                break
            sum_ += a
            number -= a
            print('a:', a)
            print("目前总和为:", sum_)
            print('剩余:', number)
            if (sum_ >= Temp):#判断是否python赢了
                return False
            b = input("输入数字:")
            b = is_right(b)
            sum_ += b
            if (sum_ >= Temp):#判断是否玩家赢了
                return True
            number -= b
            print("目前总和为:", sum_)
            print('剩余:', number)
   
    while True:#维持剩余的数是4的倍数
      b = input("输入数字:")
      b = is_right(b)
      sum_ += b
      number -= b
      print("目前总和为:", sum_)
      print('剩余:', number)
      if (sum_ >= Temp):#判断是否玩家赢了
            return True

      a = number % 4
      sum_ += a
      number -= a
      print('a:', a)
      print("目前总和为:", sum_)
      print('剩余:', number)
      if (sum_ >= Temp):#判断是否python赢了
            return False
      
      
if False == Fun(8):
    print("lose")
else:
    print('win')

天假之名 发表于 2020-4-6 11:49:11

x-Aaron 发表于 2020-4-6 11:43


import random

def myFunc(n, stepper):
    """
    :参数 n: 目标数
    :参数 stepper: 步进范围(可以走几步的最大值)
    :返回值: (flag,first_num,total_stepper)
            第一个出还是第二个出:flag=1,第一个出;flag = 0第二个出
                如果第一个出:第一次出多少 first_num
                如果第二个出:出的数总和为多少 total_stepper
    """
    total_stepper = stepper + 1# 组合数
    if n % total_stepper == 0:#能整除的情况
      print("目标数:{},步进范围:{},组合数:{}".format(n, stepper, total_stepper))
      flag = 0   # 对方先出
      return (flag, 0, total_stepper)
    else:
      v_num = n - stepper - 1# 拿到v_num就一定能数到目标数
      if v_num % total_stepper == 0:   # v_num能被组合数整除的情况
            flag = 0    # 对方先出
            print("目标数:{}, 步进范围:{}, 组合数:{}, 是否第一个出:{}".format(n, stepper, total_stepper, flag))
            return (flag, 0, total_stepper)
      else:
            flag = 1   # 我方先出
            first_num = v_num % total_stepper    # 我第一次数的数,这个数将v_num钝化为可以被组合数整除的数
            print("目标数:{}, 步进范围:{}, 组合数:{}, 是否第一个出:{}, 出多少:{}".format(n, stepper, total_stepper, flag, first_num))
            return (flag, first_num, total_stepper)

print(myFunc(30,3))


看看这个怎么样

x-Aaron 发表于 2020-4-6 12:10:27

天假之名 发表于 2020-4-6 11:49
看看这个怎么样

else里的if好像没有用到啊{:9_241:}

天假之名 发表于 2020-4-6 12:54:18

x-Aaron 发表于 2020-4-6 12:10
else里的if好像没有用到啊

v_num能被组合数整除的情况

天假之名 发表于 2020-4-6 12:55:25

x-Aaron 发表于 2020-4-6 11:43


这个最佳就给你好吧

天假之名 发表于 2020-4-6 13:12:01

天假之名 发表于 2020-4-6 11:49
看看这个怎么样

你不回我就给你了

天假之名 发表于 2020-4-6 13:12:46

天假之名 发表于 2020-4-6 11:49
看看这个怎么样

好吧

x-Aaron 发表于 2020-4-6 13:28:57

天假之名 发表于 2020-4-6 13:12
好吧

{:10_257:}
页: [1] 2
查看完整版本: python 数学问题2