📅  最后修改于: 2023-12-03 15:23:03.854000             🧑  作者: Mango
本项目是国际空间研究组织(ISRO)在2015年组织的一次技术挑战。问题45是该挑战的一个编程问题,需要编写一个程序读取数字,并生成树形结构。
给定一个数字n(n为正整数),编写一个程序以以下格式打印从1到n的数字的树形结构。
例如,n为3时,打印如下:
1
/ \
2 3
输入只包含一个正整数n,其中1 <= n <= 30。
输出树形结构,格式如上所示。
输入:
3
输出:
1
/ \
2 3
可以使用递归方法实现。首先打印空格,然后打印当前数字。每个数字的左边是它的两倍,右边是两倍加一。然后相应地计算它们的位置并在下一行打印。
下面是一个Python程序,实现了该算法。
def print_tree(n, level):
# 如果数字已经超过n,则返回
if n > (2 ** level - 1):
return ""
# 计算左右数字的值
left_val = 2 * n
right_val = 2 * n + 1
# 递归打印树形结构
left_str = print_tree(left_val, level + 1)
right_str = print_tree(right_val, level + 1)
# 返回树的字符串表示
return left_str + " " * (level - 1) + str(n) + "\n" + right_str
# 获取输入的数字n
n = int(input())
# 打印树形结构
print(print_tree(1, 1))
在上面这个程序中,print_tree
函数递归打印树形结构,其中 n
是当前数字,level
是当前层数。
程序首先计算左右数字的值,然后递归调用 print_tree
函数打印左右子树,最后将它们的字符串表示连接起来。在返回字符串之前,程序会在每一行的前面插入一定数量的空格(等于当前层数减一),以缩进树形结构。最后在主函数中调用 print_tree
函数打印树形结构。