在算法竞赛中,输入输出(I/O)是程序与外部交互的基础。C 和 C++ 提供了强大的 I/O 机制,从 C 风格的 scanf/printf 到 C++ 的流式操作 cin/cout,看似简单,实则暗藏玄机。许多开发者在使用过程中可能会遇到缓冲区问题、格式控制陷阱或性能瓶颈。本文将结合实际 OJ 题目,梳理常见输入场景,并深入探讨性能差异与优化方案。
OJ 题目输入情况汇总
在竞赛环境中,输入场景通常可以归纳为以下几类,理解这些模式有助于快速构建解题框架。
单组测试用例
这类题目通常只包含一组数据,读取后计算并输出即可。
示例:计算 (a+b)/c 的值
#include<iostream>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
cout << (a + b) / c << endl;
return 0;
}
示例:与 7 无关的数
思路是先找出与 7 相关的正整数(被 7 整除、个位是 7、十位是 7),然后取反得到无关的数。由于 n < 100,只需遍历判断。
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
int i = 1;
int sum = 0;
while(i <= n){
if(i % 7 != 0 && i % 10 != 7 && i / 10 != 7){
sum += (i * i);
}
i++;
}
cout << sum << endl;
return 0;
}
多组测试用例
测试数据组数已知
当题目明确告知有 N 组数据时,先读入 N,再循环处理。


