版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuelabizp/article/details/50788034
OJ的输入输出问题
标签: 博客 工具
1.引言
以前接触的OJ都是直接编写一个成员函数,不需要考虑读入数据的问题。今天做了某公司2016年研发工程师的编程题,题倒是不难,但是需要考虑读入数据的问题,然后就跪在了这里……好久没接触数据的输入问题,查阅了一些资料,总结一下,以免以后再跪在这里,太委屈了。主要说一下C和C++的输入输出处理,其他语言对于输入输出的处理方法都是相通的。
2.常见输入问题
均以求两个输入数据的和为例子讲解。
2.1只有一组数据
解决方法:直接处理
C
int a,b;
scanf("%d%d", &a,&b);
printf("%d\n", a+b);
C++
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
2.2有多组数据,但是告诉了数据个数
解决方法:先读入数据个数,然后根据数据个数读入数据
C
int a,b,n;
scanf("%d", &n);
for (int i=0; i<n; i++)
{
scanf("%d%d", &a,&b);
printf("%d\n", a+b);
}
C++
int a,b,n;
cin>>n;
for (int i=0; i<n; i++)
{
cin>>a>>b;
cout<<a+b<<endl;
}
2.3有多组数据,且不知道数据数量
解决方法:不断循环读入数据,直到结尾
C
int a,b;
while (scanf("%d%d", &a,&b)!=EOF)
printf("%d\n", a+b);
C++
int a,b;
while (cin>>a>>b)
cout<<a+b<<endl;
2.常见输出问题
输出问题主要是输出格式上的问题,最常见的就是只要求输入一个计算结果,且单独成行。具体按照什么样的格式输出,题目都会有要求或者示例,其它常见的输出要求有加逗号,换行两次,加特定字符(注意大小写)等等。输出之所以这么严格的要求格式,是因为判题的结果是我们计算的结果和标准结果相比较产生的,只要不一样就是错。
3.其它OJ补充
- 不需要保存输入的数据,读一组,算一组,输出一组
- 所有的输入输出都是标准输入输出,不需要对文件进行操作
- 当运行时间过长时,可以用
scanf
,gets
代替cin
,printf
代替cout
,快 main
函数为int
型,返回值必须为0
- 使用指针之前先检测是不是为
NULL
,否则会出现段错误 - 递归函数没有终止条件的话也会出现段错误