不少网络笔试不像 LeetCode 帮你完成 I/O,需要手动完成
如果没有 ACM 经验,很可能会在这上面浪费不少时间
这里总结了几种常见的 IO 模板,分别提供了 C/C++ 和 Python(TODO) 代码
输入不说明有多少个 Input,以 EOF 为结束标志
int a , b ;
// scanf 返回值为变量的个数,如果没有返回 -1,EOF 是一个预定义的常量 -1
while (scanf ("%d %d" , & a , & b ) != EOF ) {
// ...
}
int a, b;
while (cin >> a >> b) {
// ...
}
输入不说明有多少个 Input,以某个特殊输入为结束标志
// 示例 1
int a , b ;
while (scanf ("%d %d" , & a , & b ) != EOF && (a != 0 && b != 0 )) {
// ...
}
// 或者
while (scanf ("%d %d" , & a , & b ) != EOF && (a || b )) {
// ...
}
// 示例 2
int n ;
while (scanf ("%d" , & n ) != EOF && n != 0 ) {
// ...
}
// 示例 1
int a, b;
while (cin >> a >> b) {
if (a == 0 && b == 0 )
break ;
// ...
}
// 示例 2
int n;
while (cin >> n && n != 0 ) {
// ...
}
int n ;
scanf ("%d" , & n );
int a , b ;
for (int i = 0 ; i < n ; i ++ ) {
scanf ("%d %d" , & a , & b );
// ...
}
int n;
cin >> n;
int a, b;
while (n--) {
cin >> a >> b;
}
n = int (input ())
for _ in range (n ):
# ...
int n;
while (cin >> n && n != 0 ) {
int a, b;
for (int i = 0 ; i < n; i++) {
cin >> a >> b;
// ...
}
}
const int MAXN = 1000 ;
char buff[MAXN];
// C
gets (buff);
puts (buff); // 输出
// C++
cin.getline(buff, MAXN); // 第三个参数默认是 '\n'
cin.getline(buff, MAXN, ' \n ' );
string s;
getline (cin, s); // 第三个参数默认是 '\n'
getline (cin, s, ' \n ' );
int n;
cin >> n;
cin.get(); // 否则,n 也会计入下面的 getline(),导致少一组数据
while (n--) {
string s;
getline (cin, s);
}
FILE * cfin = fopen ("in.txt" , "r" );
FILE * cfout = fopen ("out.txt" , "w" );
int a , b ;
// 注意要传入文件指针
while (fscanf (cfin , "%d %d" , & a , & b ) != EOF ) { // 类似的,把 scanf 替换成 fscanf
fprintf (cfout , "%d\n" , a + b ); // 把 printf 替换为 fprintf
}
fclose (cfin );
fclose (cfout );
ifstream fin (" in.txt" );
ofstream fout (" out.txt" );
int a, b;
while (fin >> a >> b) {
fout << a + b << endl;
}
fin.close();
fout.close();