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"
相关文章推荐
- 浅谈Python浅拷贝、深拷贝及引用机制
- python-pandas功能大全
- C#调用Python脚本并使用Python的第三方模块
- python线程池(threadpool)模块使用笔记
- Python 运算符
- Window下Python环境变量配置
- Python __new__() 方法与__init__()方法
- 《HeadFirst Python》第二章学习笔记
- 《HeadFirst Python》第二章学习笔记
- Python函数
- 41. First Missing Positive
- python json 转 dict , list
- 解决python字典结构内存暴涨问题
- python学习之NumPy基础
- 用python重寫ncl的wrf_user_intrp3d函數
- Python 多进程使用之监控
- python 模块openpyxl读excel文件
- python-Xgboost可视化问题 You must install graphviz to plot tree
- python--列表操作
- 利用python获取某年中每个月的第一天和最后一天