标题:关于一道ACM的一道输入输出练习题
只看楼主
qq413785523
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-6-17
结帖率:100%
已结贴  问题点数:20 回复次数:8 
关于一道ACM的一道输入输出练习题
最近刚开始接触ACM遇到了个问题:希望大家帮帮我!~


Description
Your task is to Calculate a + b. Too easy?! Of course! I specially designed the problem for acm beginners. You must have found that some problems have the same titles with this one, yes, all these problems were designed for the same aim
Input
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line.
Output
For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of output for each line in input.
Sample Input
1 5
10 20
Sample Output
6
30
HINT
这是一个求两数之和的题目,输入多对用空格分开的两个数a b,输出a+b的和,每一对数据的和占一行。编写代码时需要注意的是,由于没有指出有多少对输入数据,因此我们可以编写如下代码:

//C语言

#include <stdio.h>
int main() //把main函数定义成int类型
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF) // 输入结束时,scanf函数返回值为EOF,即没有数据输入时则退出while循环
printf("%d\n",a+b);
return 0; //返回值为0
}
这个程序我打到我的编译器里的时候要横着输入1 5 10 20 按回车 才出现
6
30
但是题里面的样样例不是输入
1 5
10 20
输出
6
30
是我的题没读明白还是因为什么呀


搜索更多相关主题的帖子: specially designed problems course 练习题 
2011-10-31 14:35
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
找关于流的资料看看,了解一下什么是输入流、输出流

重剑无锋,大巧不工
2011-10-31 14:45
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
得分:0 
流?

最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2011-10-31 14:54
jcw08120110
Rank: 8Rank: 8
来 自:南京
等 级:蝙蝠侠
帖 子:272
专家分:742
注 册:2009-6-8
得分:0 
在C里面 接受数据是存放在一个缓存中 在你回车之前都可以更改~ 直到你回车~ 一个回车就代表一次输入;也就有一次输出! 哥哥 你会不会英文??? 题目要求就是每输入一行程序就输出他们的和~~ 就是你做的~~ 而不是一行一行的输入数据然后一起输出出去!! 我到现在没见过有谁用C语言实现你的想法~

君生我未生 我生君以老
2011-10-31 15:13
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:2 
这不是程序的问题,更不是流的问题,是你的理解问题,题目给的输出是让你输入一个1 5【回车】后,输出一个6【回车】,再输入10 20【回车】,输出30【回车】
简单来说是这样:
1 5【回车】(输入)
6【回车】(输出)
10 20【回车】(输入)
30【回车】(输出)


冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-10-31 23:04
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:10 
有争议了。这是流的问题。程序是通过输入流接受数据,通过输出流输出数据。一般情况下,将键盘作为标准输入流,屏幕作为标准输出流。而在我们通过键盘输入数据的时候,键入数据会回显在屏幕上,而且,输入是以回车作为终止标志而进入流的(之前在缓存中)。
由于上面的原因,在我们手工测试时出现输入与输出掺杂在一起的情况。
而ACM OJ的裁判程序对标准流作了重定向,使样本数据(一个文本文件)作为提交程序的输入流,自身作为提交程序的输出流接收提交程序的输出并与标准答案作比对,给出评判结果。这里输入流和输出流完全是分开的。

关于这一点,请不要质疑。因为我实际接触过样本数据,并实际写过两个特定题目的裁判程序(用于测试提交程序的执行结果与执行时间)。

我建议楼主试一下流重定向的执行方法。
1.建立一个文本文件,将测试输入按要求格式写进去保存。文件名及后缀可随意取,例如in.txt
2.假设你的提交代码编译后的名字为test.exe。在控制台下键入test<in.txt回车(“<”就是重定向输入流)
之后结果会显示在屏幕上。就只有输出流中的内容了。
还可以将输出结果重定向到文件,以保存结果。test<in.txt>out.txt回车(“>”重定向输出流)。输入与输出重定向与顺序无关。test>out.txt<in.txt也是正确的。
对于大量的测试数据建议采用以上方法执行测试。这样就不用一遍遍地敲数据了。

重剑无锋,大巧不工
2011-10-31 23:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
另外请区分回车与换行,这是两个不同的概念。源于早期的打字机,将打字头移动到最左边的动作称为回车,滚动进纸器,使纸张向上移动一行的动作称为换行。

重剑无锋,大巧不工
2011-10-31 23:31
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
太高深了

                                         
===========深入<----------------->浅出============
2011-11-01 18:40
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:8 
看了beyondyf的解释明白了,输入数据都存在文本文件中,其中的格式应该与要求的格式相同。作为裁判程序是不是把提交程序和样本数据连接起来,比如说裁判程序读入样本数据然后输入给提交程序,提交程序的输出结果再与事先准备好的结果数据进行比较,给出提交程序完成的时间、所占用的内存等信息?

不过这次的问题不是这回事,我们做题的不会先准备好一个样本数据然后用程序读入再输出结果到文件里,只是单纯的编写循环来控制程序,而在控制台下输入是以【回车】做结尾,把数据流提交到程序中运行,所以不可能出现像
1 5【回车】
10 20【回车】
然后程序进行计算输出结果
6【回车】
30【回车】
这种情况的发生,当然由于ACM OJ那有样本数据,它的输出完全可以是这个样子,不过就做题人的控制台输入而言,只能是
1 5【回车】
6【回车】
10 20【回车】
30【回车】
这种情况,所以楼主不必纠结于这种输出形式。确实,可以按照beyondyf兄的方法,先生成一个样本数据,里面可以是
1 5【回车】
10 20【回车】
然后输出的结果就和题目中给出的形式相同了。

另,我确实不怎么区分回车和换行,也区分不了

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-11-01 21:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-353906-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.636359 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved