一起挑战pythontip的题目(10)

简介: 一起挑战pythontip的题目(10)

第46题:取石子游戏

题目描述:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。

现在给出初始的两堆石子的数目a和b,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

如果你是胜者,输出Win,否则输出Loose。

例如,a=3,b=1, 则输出Win(你先在a中取一个,此时a=2,b=1,此时无论对方怎么取,你都能将所有石子都拿走).

示例:输入:a = 2

b = 1

输出:Loose


>>> a,b=2,1
>>> print("Loose" if int(abs(a-b)*(1+5**0.5)/2)==min(a,b) else "Win")
Loose
>>> a,b=3,1
>>> print("Loose" if int(abs(a-b)*(1+5**0.5)/2)==min(a,b) else "Win")
Win
>>> 



注:算式虽简单但原理有点小复杂,见:《威佐夫博弈》

============================================================

第47题:杨辉三角


题目描述:还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

..............

先在给你一个正整数n,请你输出杨辉三角的前n层注意:层数从1开始计数,每层数字之间用一个空格隔开,行尾不要有空格。如n=2,则输出:

1

1 1


>>> def func(i):
      t=L=[1]
      while(i>1):
        i-=1
        t=L+[t[n]+t[n+1] for n in range(len(t)-1)]+L
      return [str(t) for t in t]
>>> for i in range(1,10):
    print(' '.join(func(i)))
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
>>> 



============================================================

第48题:砝码问题II


题目描述:有一组砝码,重量互不相等,分别为m1、m2、m3……mn;每种砝码的数量有无限个。  

现要用这些砝码去称物体的重量,给你一个重量n,请你判断有给定的砝码能否称出重量n。  

现在给你一个正整数列表w和一个正整数n,列表w中的第i个元素w[i]表示第i种砝码的重量,

n表示要你判断的重量。如果给定砝码能称出重量n,输出Yes,否则输出No。

例如,w=[2,5,11], n=9,则输出Yes(取两个2,一个5)。

示例:输入:w = [1, 2]

n = 18

输出:Yes

============================================================

第49题:进制转换


题目描述:给你一个十进制数a,将它转换成b进制数,如果b>10,用大写字母表示(10用A表示,等等)

a为32位整数,2 <= b <= 16

如a=3,b = 2, 则输出11

示例:输入:a = 7

b = 2

输出:111



>>> def baseN(a, b):
  '''10制数a转任意b进制数,其中b<=36'''
  return a==0 and "0" or (baseN(a//b,b).lstrip("0") + ''.join([chr(i) for i in range(48,71) if not 57<i<65])[a%b])
>>> baseN(111,2)
'1101111'
>>> baseN(7,2)
'111'
>>> baseN(177,12)
'129'
>>> baseN(178,12)
'12A'
>>> baseN(178,16)
'B2'
>>> hex(178)
'0xb2'
>>> 


============================================================

第50题:Py扔铅球


题目描述:Py不但是编程大牛,而且是运动健将。比如说扔铅球,1000m,现在Py参加校园扔铅球比赛,给你Py的身高a(双精度数),球落地点与Py头部的连线与水平线的夹角 b(弧度),

要你编写一个程序计算Py扔铅球的水平距离。

a,b都是浮点数,注意b是弧度,其中, 140 < a < 200,  0 < b < 1.5.

输出你求出的水平距离,保留到小数点后三位。

如,a = 165.5, b=1.1, 则输出84.234

示例:输入:a = 165.5

b = 1.1

输出:84.234

============================================================



目录
相关文章
|
Python
一起挑战pythontip的题目(34)
一起挑战pythontip的题目(34)
89 0
|
机器学习/深度学习
一起挑战pythontip的题目(30)
一起挑战pythontip的题目(30)
60 0
|
算法
一起挑战pythontip的题目(2)
一起挑战pythontip的题目(2)
62 0
一起挑战pythontip的题目(5)
一起挑战pythontip的题目(5)
76 0
|
数据安全/隐私保护
一起挑战pythontip的题目(13)
一起挑战pythontip的题目(13)
66 0
一起挑战pythontip的题目(36-1)
一起挑战pythontip的题目(36-1)
57 0
|
算法 测试技术 定位技术
一起挑战pythontip的题目(20)
一起挑战pythontip的题目(20)
91 0
一起挑战pythontip的题目(37)
一起挑战pythontip的题目(37)
83 0
一起挑战pythontip的题目(11)
一起挑战pythontip的题目(11)
43 0
|
定位技术 Python
一起挑战pythontip的题目(28)
一起挑战pythontip的题目(28)
95 0