您的位置:首页 > 编程语言 > Python开发

PythonTip(36~40)题详解

2016-12-15 14:55 369 查看

题目36:最大非连续子序列

描述:给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。

这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。

例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50]).

答案:与上题一样,用线性时间做

L = [0, 0] + L
n = len(L)
dp = [0] * n
for i in xrange(2, n):
dp[i] = max(dp[i-2]+L[i], dp[i-1])
print dp[n-1]


题目37:简单题之勾股定理

描述:给你直角三角形的两个直角边的边长a,b,请你求出其斜边边长,结果保留小数点后三位小数。

如a=3, b =4, 则输出5.000。

答案:这个比较好做

import math
x = math.sqrt(a**2 + b**2)
print "%.3f"%(x)


题目38:简单题之列表转换

描述:给你一个字符串列表L,请用一行代码将列表所有元素拼接成一个字符串并输出。

如L=[‘abc’,’d’,’efg’], 则输出abcdefg。

答案:

print "".join(list(L))


题目39:简单题之输出格式练习

描述:给你一个字符串列表L,用一行代码顺序输出L中的元素,元素之间以一个空格隔开,注意行尾不要有空格,输出单独占一行。

如L=[‘abc’,’d’,’efg’], 则输出abc d efg。

答案:没什么好分析的,与上题类似。

print " ".join(L)


题目40:整数解

描述:给你两个整数a和b,请你判断是否存在两个整数,他们的和为a,乘积为b。(−10000<a,b<10000)

若存在,输出Yes,否则输出No

例如:a=9,b=15, 此时不存在两个整数满足上述条件,所以应该输出No。

答案:此题就是一元二次求根,求根公式。



from math import sqrt
# 判断是否有整数解
def HaveIntAns(a,b):
gs = a*a-4*b
# 是否有根
if gs<0:
return False

# 整数根
x = (a+sqrt(gs))/2
y = (a-sqrt(gs))/2

if x-int(x) != 0:
return False
if y-int(y) != 0:
return False

return True

if HaveIntAns(a, b):
print "Yes"
else:
print "No"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: