【精华】ACM八大输入输出格式之Python版

本文介绍Python中处理多组输入数据的方法,包括不同场景下的输入读取及数据转换技巧。通过实例演示了如何根据不同条件终止输入循环,以及如何计算并输出每组数据的总和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/luovilonia/article/details/40860323


感谢细胞学长提供的帮助,此处应有传送门:说吧,记忆 - 博客频道 - youkuaiyun.com

根据杭电的那篇教程写的,现在博客里面再存一篇


# encoding: utf-8

'''
Created on Nov 6th, 2014

@author: Speedcell
'''

'''Python的输入是野生字符串,所以要自己转类型
strip去掉左右两端的空白符,返回str
slipt把字符串按空白符拆开,返回[str]
map把list里面的值映射到指定类型,返回[type]

EOF用抓异常

print后面加逗号就不会换行,否则反之,当然3.x君自行传参

题目细节没看太细,可能有的地方不对,不要在意这些细节啦

これは以上です'''

# 有多组输入数据,但没有具体的告诉你有多少组,只是让你对应每组输入,应该怎样输出。

while True:
    try:
        a, b = map(int, raw_input().strip().split())
        print a + b,
    except EOFError:
        break
    
# 输入一个整数,告诉我们接下来有多少组数据,然后在输入每组数据的具体值。

tcase = int(raw_input().strip())
for case in range(tcase):
    a, b = map(int, raw_input().strip().split())
    print a + b,
    
# 有多组输入数据,没有具体的告诉你有多少组,但是题目却告诉你遇见什么结束

while True:
    a, b = map(int, raw_input().strip().split())
    if a == 0 and b == 0:
        break
    print a + b,
    
# 输入有多组,并却题目告诉你每组输入遇见什么结束,与第三种不同之处在于,每组输入都有相应的细化。
    
tcase = int(raw_input().strip())
for case in range(tcase):
    a, b = map(int, raw_input().strip().split())
    if a == 0 and b == 0:
        break
    print a + b,
    
# 这次的输入实现输入一个整数,告诉我们有多少行,在输入每一行。对于每一行的输入,有划分为第一个数和其他的数,第一个数代表那一组数据一共有多少输入。

tcase = int(raw_input().strip())
for case in range(tcase):
    data = map(int, raw_input().strip().split())
    n, array = data[0], data[1:]
    
    sum = 0
    for i in range(n):
        sum += array[i]
    print sum,
    
# 有多种输入数据,对于每组输入数据的第一个数代表该组数据接下来要输入数据量

while True:
    try:
        data = map(int, raw_input().strip().split())
        n, array = data[0], data[1:]
            
        sum = 0
        for i in range(n):
            sum += array[i]
        print sum,
    except EOFError:
        raise
    
# 这道题的输出只是简单的在每组输出后边多加一个换行而已!

while True:
    try:
        a, b = map(int, raw_input().strip().split())
        print a + b
    except EOFError:
        break
    
# 这种类型的输出注意的就是换行,这类题目说在输出样例中,每组样例之间有什么什么,所以我们在对应输出的同时要判断一下是否是最后一组输出,如果不是,就 将题目所说的东西输出(一般是换行或空格),如果是,就直接结束。

while True:
    data = raw_input().strip()
    if data.isspace():
        break
    else:
        data = map(int, data)
        n, array = data[0], data[1:]
                
        sum = 0
        for i in range(n):
            sum += array[i]
        print sum,

### Python ACM 中二叉树的输入输出格式ACM 竞赛中,处理二叉树通常涉及两种主要操作:**构建二叉树**和**输出特定形式的结果**。以下是关于如何用 Python 实现这些功能的具体方法。 #### 构建二叉树 给定一组数据(如层次遍历),可以通过定义一个 `TreeNode` 类来表示二叉树中的节点,并通过递归或其他方式完成二叉树的构建[^3]。 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def build_tree_from_level_order(level_order_list): if not level_order_list or level_order_list[0] is None: return None root = TreeNode(level_order_list[0]) queue = [root] i = 1 while i < len(level_order_list): current_node = queue.pop(0) # 左子节点 if i < len(level_order_list) and level_order_list[i] is not None: current_node.left = TreeNode(level_order_list[i]) queue.append(current_node.left) i += 1 # 右子节点 if i < len(level_order_list) and level_order_list[i] is not None: current_node.right = TreeNode(level_order_list[i]) queue.append(current_node.right) i += 1 return root ``` 此函数接受一个列表作为参数,该列表按照层序遍历的方式描述了一棵二叉树。如果某个位置为空,则使用 `None` 表示[^2]。 --- #### 输出二叉树的右视图 为了输出二叉树的右视图,可以采用广度优先搜索 (BFS),并记录每一层最右边的节点值。 ```python from collections import deque def right_side_view(root): if not root: return [] result = [] queue = deque([root]) while queue: size = len(queue) for i in range(size): node = queue.popleft() if i == size - 1: # 当前层最后一个节点 result.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return result ``` 上述代码实现了从上到下逐层遍历二叉树的功能,并提取每层中最右侧的节点值形成最终结果。 --- #### 计算二叉树的最大深度 计算一棵二叉树的最大深度是一个经典的递归问题。以下为其实现: ```python def max_depth(root): if not root: return 0 return max(max_depth(root.left), max_depth(root.right)) + 1 ``` 这段代码利用了递归来分别求解左子树和右子树的高度,并返回两者较大者加一后的结果。 --- #### 完整示例程序 下面提供了一个完整的示例程序,展示如何读取输入、构建二叉树以及执行相关操作。 ```python import sys input = sys.stdin.read data = input().strip().split() # 将输入转换为整数列表 level_order_list = [int(x) if x != 'null' else None for x in data] # 构建二叉树 tree_root = build_tree_from_level_order(level_order_list) # 获取最大深度 depth = max_depth(tree_root) print(f"Maximum Depth of the Tree: {depth}") # 获取右视图 right_view = right_side_view(tree_root) print(f"Right Side View of the Tree: {' '.join(map(str, right_view))}") ``` 假设输入如下: ``` 3 9 20 null null 15 7 ``` 则输出应为: ``` Maximum Depth of the Tree: 3 Right Side View of the Tree: 3 20 7 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值