第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

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