该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第一题:
"""
输入绳子的长度n,将该绳子分成三段,每段的长度为正整数,输出由该三段绳子能够组成三角形的个数
"""
import sys
help_msg = """使用说明: /path/to/python /path/to/01.py n
参数说明:n: 代表三角形长度
"""
def get_triangle_num(length):
"""
根据绳子长度,求可以生成三角形的数目
前提条件:
1.三角形单边都是正整数,所以允许的最小长度等于1
2.因为三角形两边之和第三边,所有最大边长小于1/2 * n
3.另外一个隐含条件就是三边直接为n
:param length:
:return:
"""
if (not isinstance(length, int)) or (length < 3):
return 0
fit_set = set()
for n1 in range(1, int(length / 2) + 1):
for n2 in range(1, int(length / 2) + 1):
for n3 in range(1, int(length / 2) + 1):
# 三边之和
if (n1 + n2 + n3) != length:
continue
# 对符合第一个条件的数据,进行排序
tmp_li = [n1, n2, n3]
tmp_li = sorted(tmp_li)
if (tmp_li[0] ** 2 + tmp_li[1] ** 2) < (tmp_li[2] ** 2):
continue
tmp_str = '_'.join([str(x) for x in tmp_li])
if tmp_str not in fit_set:
print('--' * 10)
print("n1={0},n2={1},n3={2}".format(n1, n2, n3))
print(tmp_str)
fit_set.add(tmp_str)
return len(fit_set)
if __name__ == '__main__':
if len(sys.argv) != 2:
print(help_msg)
exit()
n = int(sys.argv[1])
num = get_triangle_num(n)
print('三角形数目:{0}'.format(num))