牛客输入输出总结

在这里插入图片描述
重大失误—注意,input这个函数就是写一次输入一次,出现多少个代表输入多少次。
输入进来被当为字符串。

a = input()
b = input()
print(a)
print("True")
print(b)
a
b
a
True
b

虽然input()可以解决,但是还是补上:
sys.stdin.readlines() 读取一整行

import sys
for line in sys.stdin.readlines():
    line = line.strip()
    n = len(line)
    index = 0
    while index + 8 <= n:
        print line[index:index+8]
        index += 8
    if n - index > 0:
        print line[index:] + '0'*(index+8-n)

多行输入,行数已知

在这里插入图片描述

'多行输入'
res = []
n = int(input())#行数
for _ in range(n):
    s = input()
    if s!='':
        temp = [j for j in s.split()] #str输入
        # temp = [int(j) for j in s.split()] #int输入
        res.append(temp[0])
    else:
        break
print(res)

‘多行输入,行数未知’

使用try except
在这里插入图片描述

'多行输入,行数未知'
res = []
while True:
    try:
        s = input()
        # res.append(list(map(int, s.split(' '))))
        res.append(list(map(str, s.split(' '))))  # res.append(s.strip().split()) # res.append(s.strip().split(' '))
    except:
        break

strip的使用

grid = []
line = input().strip().split("],")
for li in line:
    print(li)
    li = li.strip("[").strip("]").split(",")
    grid.append(li)
print(grid)
[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]
[[1,1,0,0,0
[0,1,0,1,1
[0,0,0,1,1
[0,0,0,0,0
[0,0,1,1,1]]
[['1', '1', '0', '0', '0'], ['0', '1', '0', '1', '1'], ['0', '0', '0', '1', '1'], ['0', '0', '0', '0', '0'], ['0', '0', '1', '1', '1']]

牛客的坑爹输入输出:
在这里插入图片描述
即使说了最后的输出是list,但是正常的操作会导致空格问题…不知道为啥,所以必须先转换位str,强制把里面的" “转化为”"
print(str(Solution().solve(eval(res[0]), eval(res[1]))).replace(" ", “”))----记住就行了。目的是每一次的题目都要自己写input()。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 求二叉树的右视图
# @param xianxu int整型一维数组 先序遍历
# @param zhongxu int整型一维数组 中序遍历
# @return int整型一维数组
#
from collections import deque
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def solve(self , xianxu , zhongxu ):
        # write code here
        out = []
        queue = deque()
        
        def level(root, queue):
            res = deque()
            while queue:
                node = queue.popleft()
                if node.left:
                    res.append(node.left)
                if node.right:
                    res.append(node.right)
                if not queue:
                    out.append(node.val)
                    queue = res
                    res = deque()
        
        def find_root(xianxu, zhongxu):
            for i in range(len(zhongxu)):
                if zhongxu[i] == xianxu[0]:
                    return i
        def re_build(xianxu, zhongxu):
            if not xianxu:
                return
            node = TreeNode(xianxu[0])
            index = find_root(xianxu, zhongxu)
            node.left = re_build(xianxu[1:1+index], zhongxu[0:index])
            node.right = re_build(xianxu[1+index:], zhongxu[index+1:])
            return node
        root = re_build(xianxu, zhongxu)
        queue.append(root)
        level(root, queue)
        return out
    
res = input().strip().split("],[")
res[0] = res[0] + "]"
res[1] = "[" + res[1] 
print(str(Solution().solve(eval(res[0]), eval(res[1]))).replace(" ", ""))

<think>嗯,用户问的是牛客网中手动处理输入输出的具体含义。我需要先回顾一下之前的引用内容,看看里面提到的相关信息。引用1里提到,牛客网不像LeetCode只需要写函数体,而是要手动获取输入输出并打印,可能还要封装成函数然后调用。引用2也提到Python的标准输入输出处理,特别是如何读取固定或非固定长度的输入。引用3中的C++例子展示了如何处理多组输入,比如用while循环读取cin。引用4的C++例子则是处理确定数量的输入用例,先读取n,再循环读取n次。 用户可能对“手动处理”不太理解,需要解释清楚。手动处理意味着用户需要自己编写代码来获取输入数据,处理后再输出结果,而不是像LeetCode那样只需要完成函数。比如在牛客网中,可能需要用input()或sys.stdin读取输入处理数据,再用print输出结果。这涉及到如何处理不同格式的输入,比如多行、多组数据,或者不定数量的输入。 还要注意不同编程语言的处理方式可能不同,比如Python用input(),而C++用cin。用户可能需要知道具体的代码示例,比如如何处理多组测试用例,或者如何读取数组。此外,输出时要确保格式正确,比如空格分隔或换行,不能直接return结果,而是要用print。 可能还需要解释为什么牛客网需要这样的处理方式,比如在线评测系统的特点,需要从标准输入读取数据,并将结果输出到标准输出。而LeetCode则封装了这些细节,用户只需关注算法函数本身。 总结回答的结构:先解释手动处理的含义,然后对比LeetCode和牛客网的不同,给出具体例子,说明输入输出处理步骤,最后总结注意事项。这样用户能清晰理解手动处理的流程和必要性,以及如何在不同场景下编写代码。</think>### 牛客网中手动处理输入输出的具体含义 在牛客网的编程题目中,**手动处理输入输出**指开发者需要主动编写代码来读取输入数据,并对处理结果进行格式化输出。这与LeetCode等平台不同(LeetCode仅需实现核心逻辑函数),牛客网要求开发者自行管理输入输出流。以下是具体说明: --- #### 1. **输入处理** - **核心需求**:从标准输入(如键盘输入、文件流)读取数据,需根据题目要求解析数据格式。 - **常见场景**: - **多组测试用例**:需用循环读取直到输入结束(例如C++的`while(cin>>a>>b)`[^3])。 - **固定行数输入**:需先读取行数`n`,再循环读取`n`次数据(如Python的`n = int(input())`[^2])。 - **不定长输入**:需按分隔符(如空格、换行)切割字符串(例如Python的`input().split()`[^2])。 **示例(Python)**: ```python # 读取两个整数a,b(多组输入) import sys for line in sys.stdin: a, b = map(int, line.strip().split()) print(a + b) ``` --- #### 2. **输出处理** - **核心规则**:必须通过`print`或`console.log`等函数显式输出结果,而非通过函数返回值[^1]。 - **格式化要求**:结果需按题目要求严格匹配格式(如空格分隔、换行分隔)。 **示例(C++)**: ```cpp // 输出排序后的字符串列表 vector<string> ret; for (int i=0; i<n; i++) { cout << ret[i] << endl; // 逐行输出[^4] } ``` --- #### 3. **与LeetCode的关键区别** | 特性 | 牛客网 | LeetCode | |--------------------|--------------------------|------------------------| | **输入来源** | 手动读取标准输入 | 函数参数自动传入 | | **输出方式** | 手动打印结果 | 函数返回值自动处理 | | **代码结构** | 需包含完整程序(如`main`) | 仅需实现指定函数 | --- #### 4. **典型场景及处理步骤** 1. **已知行数的输入** - 步骤: 1. 读取第一行的整数`n`; 2. 循环读取`n`行数据。 - 代码示例(Python): ```python n = int(input()) data = [input().strip() for _ in range(n)] ``` 2. **未知行数的多组输入** - 步骤: 1. 使用`while`循环持续读取输入; 2. 通过异常捕获或文件结束符退出循环。 - 代码示例(C++): ```cpp int a, b; while (cin >> a >> b) { // 输入结束时自动终止[^3] cout << a + b << endl; } ``` --- #### 5. **注意事项** - **输入格式需严格匹配**:例如,若题目要求用逗号分隔,需手动调用`split(',')`。 - **避免冗余输出**:仅打印题目要求的内容,不可添加调试信息。 - **性能优化**:对于大规模输入,建议使用快速读取方法(如C++的`ios::sync_with_stdio(false)`)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值