不少网络笔试不像 LeetCode 帮你完成 I/O,需要手动完成;个人深受其痛,现将常用的 IO 模板总结与此,分别总结了 C/C++ 和 Python 代码
C++
int a, b;
while (cin >> a >> b) {
// ...
}
C++
// 示例 1
int a, b;
while (cin >> a >> b) {
if (a == 0 && b == 0)
break;
// ...
}
// 示例 2
int n;
while (cin >> n && n != 0) {
// ...
}
C++
int n;
cin >> n;
int a, b;
while(n--) {
cin >> a >> b;
}
Python3
n = int(input())
for _ in range(n):
# ...
C/C++
int n;
while (cin >> n && n != 0) {
int a, b;
for (int i = 0; i < n; i++) {
cin >> a >> b;
// ...
}
}
用 char[] 接收(C/C++)
const int MAXN = 1000;
char buff[MAXN];
// C
gets(buff);
puts(buff); // 输出
// C++
cin.getline(buff, MAXN); // 第三个参数默认是 '\n'
cin.getline(buff, MAXN, '\n');
用 string 接收(C++)
string s;
getline(cin, s); // 第三个参数默认是 '\n'
getline(cin, s, '\n');
C++
int n;
cin >> n;
cin.get(); // 否则,n 也会计入下面的 getline(),导致少一组数据
while (n--) {
string s;
getline(cin, s);
}
C++
ifstream fin("in.txt");
ofstream fout("out.txt");
int a, b;
while (fin >> a >> b) {
fout << a + b << endl;
}
fin.close();
fout.close();
在笔试时,有时候用 Python 进行数据处理比 C++ 要方便很多,但是如何能够顺利地读入数据呢?如果使用input(),那么输入时不能有空格分割,这不是我们想要的。 比如我们需要一次读取一行,可以使用sys.stdin.
for line in sys.stdin
#operate(line)
#print(line)
这样可以一次读取一整行。 也可以这样做:
while True:
line = sys.stdin.readline()
#operate(line)
#print(line)
if line == ''
break
还有,如果在输出时,print 的换行很不好用的话,可以使用sys.stdout.write(),这样容易控制整个输出。
def test():
N = int(input())
inputlist = []
area = 0
for i in range(N):
line = input()
line_res = rule(line)
print(line_res)
def insert_sort2():
N = int(input())
str_input = input()
ary = list(map(int, str_input.split()))
# count = len(ary)
for i in range(1, N):
key = i - 1
mark = ary[i] # 注: 必须将ary[i]赋值为mark,不能直接用ary[i]
while key >= 0 and ary[key] > mark:
if (ary[key] + mark)%2 == 1:
ary[key + 1] = ary[key]
key -= 1
ary[key + 1] = mark
res = sorted(ary)
return res
// 本题为考试单行多行输入输出规范示例,无需提交,不计分。
#include
using namespace std;
int main() {
int a,b;
while(cin >> a >> b)// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
cout << a+b << endl;
}
Python
#coding=utf-8
# 本题为考试单行多行输入输出规范示例,无需提交,不计分。
import sys
for line in sys.stdin:
a = line.split()
print(int(a[0]) + int(a[1]))
n = int(input())
for i in range(n):
values = list(map(int, input().strip().split()))
print(values[0] + values[1])
// 本题为考试多行输入输出规范示例,无需提交,不计分。
#include
#include
using namespace std;
int main(){
//freopen("1.in","r",stdin);
int n,ans = 0;
cin >> n;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
int x; scanf("%d",&x);
ans += x;
}
}
cout << ans << endl;
return 0;
}
Python
#coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys
if __name__ == "__main__":
# 读取第一行的n
n = int(input())
ans = 0
for i in range(n):
# 读取每一行
line = input()
# 或者 line = sys.stdin.readline()
# 把每一行的数字分隔后转化成int列表
values = list(map(int, line.strip().split()))
for v in values:
ans += v
print(ans)
注:有一些时候 牛客网要求输出多行,每行结果对应一个 testcase 输入处理,这种情况下可以直接在 main 函数中进行 for 循环调用函数,输出结果。
[1] Python IO 模板
[2] 备忘-IO 模板
[3] 牛客网标准输入输出