牛客网 刷题前的准备工作(输入 输出 如何接收?)

牛客网 刷题前的准备工作

  • 牛客网 刷题前的准备工作
    • 1. 数据读取接受问题
    • 2.牛客刷题前的准备:
      • 2.1. 弄清楚输入输出的行数关系
    • 3.代码怎么写
      • 3.1. 在牛客上测试自己的模板代码,是否能正确接受数据和输出数据。
      • 3.2. 在本地debug也是需要模板的。
    • 4. 最终使用的模版如下:
    • 5. 牛客对输入的处理汇总如下(上面的内容如果不想看,只需要会用下面就行):
      • 5.1. 读取 一些数字的 方法
      • 5.2. 读取 一些字符串的 方法

牛客网 刷题前的准备工作

1. 数据读取接受问题

  • leetcode是直接调用我们写一个函数来测试算法,不存在数据的读取问题。牛客是写一个完整的程序,需要读取题目给出的数据
  • 牛客的数据处理方式:需要接受数据,返回数据。
    接受数据的方式两种: line_in_data = sys.stdin.readline().strip()有时可以用line_indata = input() 替代(注意:input()内不能加字符串)。
    输出数据的方式:print(out_data),(注意:不是 return)

牛客官网推荐的接受数据的代码 python,其他语言见链接:https://www.nowcoder.com/discuss/276:
官网 python2 的模板如下:

# 作者:管理员
# 链接:https://www.nowcoder.com/discuss/276
# 来源:牛客网

import sys
try:
    while True:
        line = sys.stdin.readline().strip()
        if line == '':
            break
        lines = line.split()
        print int(lines[0]) + int(lines[1])
except:
    pass

为了方便在本地调试,我将代码改成如下,我看了牛客替他人提交的答案,也是将while写在了try里面(官网模板相反)(自己使用的模板):


# -*- coding: utf-8 -*-
import sys
try:
    while True:
        line = sys.stdin.readline().strip()
        if line == '':
            break

        # lines = line.split()
        # print(int(lines[0]) + int(lines[1]))
except:
    pass

2.牛客刷题前的准备:

2.1. 弄清楚输入输出的行数关系

根据链接牛客网 多行输入输出问题 Python3 模板样例的总结如下(自己简写了代码):

  1. 输入数据一行,输出数据也是一行:

模板如下:

# -*- coding: utf-8 -*-
i = input()

print(i)

样题链接:https://www.nowcoder.com/question/next?pid=710802&qid=26011&tid=31559276

我的测试通过的代码如下:

# -*- coding: utf-8 -*-
import sys

try:
    while True:
        line = sys.stdin.readline().strip()
        # lines = sys.stdin.readlines().strip()
        if line == '':
            break
        res = ""
        for i in line:
            if i not in res:
                res += i
        print(res)
        # lines = line.split()
        # print(int(lines[0]) + int(lines[1]))
except:
    pass
  1. 输入数据多行,行数已知(第一个数表示后面要接受的数据的行数):

# -*- coding: utf-8 -*-
n = input()  # 接受n
info_data = []
for _ in range(n):
	info_data.append(input())  # 接受n下面的n行数据

print(info_data)
for i in range(len(info_data)))print(info_data[i])  # 一行输出一个
	print(info_data[i], end = " ")   # 一行输出所有,空格隔开
  1. 输入数据多行,行数不确定(不停地接受数据):
# -*- coding: utf-8 -*-
import sys
try:
    while True:
        line = sys.stdin.readline().strip()
        if line == '':
            break
        # lines = line.split()
        # print(int(lines[0]) + int(lines[1]))
except:
    pass
  1. 首行两个数字:
# -*- coding: utf-8 -*-
info_2 = list(map(int, input().split(" ")))
a = []
b = []

for _ in range(info[0]):
	a.ppend(input().split(" "))
for _ in range(info[1]):
	b.ppend(input().split(" "))	

3.代码怎么写

3.1. 在牛客上测试自己的模板代码,是否能正确接受数据和输出数据。

这里要准备(背下来)好直接能用的模板:

3.2. 在本地debug也是需要模板的。

这里也要记住在本地使用的模板,本地的模板和最终提交牛客的模板是有区别的。

4. 最终使用的模版如下:

# -*- coding: utf-8 -*-

import sys

# 题目是:https://www.nowcoder.com/profile/515223636/codeBookDetail?submissionId=69667629
# 测试样例是 I am a boy
# 提交给牛客时 删除下面的行就行, 自己写的。 
# 请勿在该程序中修改代码,请复制到其他文件中去写。
file = open('input.in')
sys.stdin = file

while True:
    # try:
    line = sys.stdin.readline().strip()

    if line == '':
        break

    res = ""
    for d in line.split(" ")[::-1]:
        res += d + " "
    print(res.rstrip())

5. 牛客对输入的处理汇总如下(上面的内容如果不想看,只需要会用下面就行):

  1. 牛客官方给出的对 输入的处理例子:https://ac.nowcoder.com/acm/contest/5647?from=hr_test#question

5.1. 读取 一些数字的 方法

import sys

# 题目是:https://www.nowcoder.com/profile/515223636/codeBookDetail?submissionId=69667629
# 测试样例是 I am a boy
# 提交给牛客时 删除下面的行就行, 自己写的。 
# 请勿在该程序中修改代码,请复制到其他文件中去写。

file = open('input.in')
sys.stdin = file


# 将读取的字符串 转成 int
n = int(sys.stdin.readline().strip())   # 第一行
while  True:  # 后面每一行的
	# 将一行的数据 按空格分开读取成 int list。 list 的长度 就是 数据的个数。
	nums = [int(i) for i in sys.stdin.readline().strip().split()]
	if not nums: break # 如果空行,nums 为 []
	
	# ############# 上面的等效于 #################
	line = sys.stdin.readline().strip()  # 读取后面的每一行
	if line == '': break
	nums = [int(i) for i in line.split()]  # 将改行处理成 int  存放在 list 中
	

5.2. 读取 一些字符串的 方法

import sys

file = open('input.in')
sys.stdin = file

n = int(sys.stdin.readline().strip())   # 第一行
while True:  # 后面每一行。 可以根据第一行读取的数据控制,后续需要读取的行数。while n > 0: n -= 1 
	# strs = sys.stdin.readline().strip().split()  # 读取一行字符 以空格间隔开字符串 并存放在list 中
    strs = sys.stdin.readline().strip().split(',')  # 读取一行字符 以','间隔开字符串 并存放在list 中
	if not strs: break  # 空行结束循环
	strs = ' '.join(sorted(strs))  # list 转成一个字符串。排序 中间 加 空格。末尾无空格
	

你可能感兴趣的:(数据结构与算法,刷题,牛客)