1. 牛客OJ在线编程输入输出练习场全解析
作为C++程序员在牛客网刷题时,最常遇到的第一个门槛就是如何处理各种格式的输入输出。这个练习场专门针对ACM模式下的数据交互场景设计,包含从基础到高阶的12种输入输出模式训练。我以实际刷题经验为例,带你看透每种模式的解法套路。
提示:牛客网的ACM模式与本地IDE调试最大区别在于——所有输入数据都是通过标准输入流(stdin)实时获取,输出必须严格匹配题目要求的格式和顺序。
1.1 基础输入输出模式
最常见的多组数据输入模式,以a+b问题为例:
cpp复制#include <iostream>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b) { // 关键:循环读取直到EOF
cout << a + b << endl;
}
return 0;
}
这里有几个新手容易踩的坑:
- 未处理多组数据情况(缺少while循环)
- 输出缺少换行符(OJ系统会判格式错误)
- 使用
scanf时未处理返回值(推荐用cin避免此问题)
1.2 带终止条件的输入处理
当输入遇到特定值时终止,比如输入0结束:
cpp复制int num;
while (cin >> num && num != 0) { // 双条件判断
// 处理逻辑
}
更复杂的终止条件可能要求判断多组输入,例如:
code复制3 // 表示后续有3组数据
1 5
2 8
4 9
对应代码结构:
cpp复制int n;
while (cin >> n && n != 0) {
for (int i = 0; i < n; ++i) {
int a, b;
cin >> a >> b;
// 处理每组数据
}
}
1.3 字符串与数字混合输入
当题目要求处理如"Tom 25"这样的混合数据时:
cpp复制string name;
int age;
while (cin >> name >> age) {
cout << name << "
