Python Tip(46~50)题详解

题目46.取石子游戏

描述:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,
一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。
现在给出初始的两堆石子的数目a和b,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。
如果你是胜者,输出Win,否则输出Loose。
例如,a=3,b=1, 则输出Win(你先在a中取一个,此时a=2,b=1,此时无论对方怎么取,你都能将所有石子都拿走).

答案

import math
p = (math.sqrt(float(5))+1)/float(2)
c = abs(a-b)
if a > b:
    a = b
if a == int(p*c):
    print "Loose"
else: 
print "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

答案:

trangle = [['1'],['1','1']]

def print_trangle(n):
    for i in range(n):
        print ' '.join(trangle[i])   
for i in range(3,n+1):
    tmp=['1']
    newRow= trangle[i-2]
    for j in range(len(newRow)-1):
        tmp.append(str(int(newRow[j])+int(newRow[j+1])))
    tmp.append('1')
    trangle.append(tmp)

print_trangle(n)

题目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)。

答案

def solve(): 
    num=[]
    for i in range(len(w)):
        num.append(n/w[i])
        m = set()
        for i in range(num[0]+1):
            m.add(w[0]*i)
    for i in range(1,len(num)):
        tmp = m.copy()
        m.clear()
        for j in range(num[i]+1):
            for k in tmp:
                if w[i]*j+k < n:
                    m.add(w[i]*j+k)
                elif w[i]*j+k == n:
                    return "Yes"
    return "No"

print solve()

题目49.进制转换

描述:给你一个十进制数a,将它转换成b进制数,如果b>10,用大写字母表示(10用A表示,等等)
a为32位整数,2 <= b <= 16
如a=3,b = 2, 则输出11

答案:不要忘记a为负数的情况。

base = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F')
def transfer(a,b):
    res = []
    aa = abs(a)
    while aa:
        res.append(base[aa%b])
        aa/=b
    if a<0:
        res.append('-')        
    return ''.join(res[::-1])
print transfer(a,b)

题目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

答案:

import math
print "%.3f" % (a/math.tan(b))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值