ACM竞赛之输入输出
http://acm.njupt.edu.cn/acmhome/problemdetail.do?id=1083&method=showdetail
比赛描述
字符串的输入输出处理。
输入
第一行是一个正整数N,最大为100。
之后输入多行字符串(行数大于N), 每一行字符串可能含有空格,且字符数不超过1000。
输出
对于前N行字符串,按原样输出;
对于其余的字符串以空格符为分割依次按行输出。
注意:每行输出之间均要输出一个空行。
样例输入
2
N U P Ter
样例输出
N
U
P
Ter
提示
对于输入输出仍有困惑的同学请仔细阅读以下内容:
在ACM竞赛中,对于数据的读入,一般有以下四种情况:
一、四种基本输入形式:
1. 单组输入数据
示例:整数求和
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1001
C语言:
#include <stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a, &b);
printf("%d\n",a+b);
}
C++:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
return ;
}
注意:输入前无需也不要输出任何提示信息。
2. 多组输入数据,且不说明多少组,直到读至输入文件末尾为止
示例:A + B Problem (1)
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1084
C语言:
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a,&b) != EOF)
printf("%d\n",a+b);
return ;
}
说明:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有输入了一个整数,返回值是1,如果输入了两个,返回值是2,如果一个都没有,则返回值是EOF。EOF是一个预定义的常量,等于-1
C++:
#include<iostream>
using namespace std;
int main()
{
int a,b;
while(cin>>a>>b)
cout<<a+b<<endl;
return ;
}
说明:表达式cin >> m >> n在读入发生错误返回0,否则返回cin的地址。
3. 多组输入数据,不说明多少组,以某特殊输入为结束标志。
示例:A + B Problem (2)
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1085
C语言:
#include<stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
if(a==&&b==)
break;
printf("%d\n",a+b);
}
return ;
}
C++:
#include<iostream>
using namespace std;
int main()
{
int a,b;
while(cin>>a>>b)
{
if(a==&&b==)
break;
cout<<a+b<<endl;
}
return ;
}
说明:当读入的a与b同时为0时,程序终止;
4. 多组输入数据,开始输入一个T,接下来是T组数据
示例:A + B Problem (3)
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1086
C语言:
#include<stdio.h>
int main()
{
int T;
int a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
return ;
}
C++:
#include<iostream>
using namespace std;
int main()
{
int T;
int a,b;
cin>>T;
while(T--)
{
cin>>a>>b;
cout<<a+b<<endl;
}
return ;
}
说明:当T组数据处理完后,程序终止;
关于字符串的读入,这里再做专门讨论:
二、字符串输入
对字符串的输入分三种情况:
1、每个字符串中不含空格、制表符及回车
这种情况,用scanf函数是再好不过的了;
例如:要读入字符串"abcdef"
那么只要:
char str[];
scanf("%s",str);
说明:scanf函数读入字符串时,是以空格、制表符及回车作为不同字符串之间的分隔符的;
2、字符串中含有空格、制表符,但不含回车
对于这种情况不能使用scanf,而应该使用gets函数;
例如:要读入字符串 "Hello world!"
那么只要:
char str[];
gets(str);
说明:gets函数读入字符串时,只以回车作为不同字符串之间的分隔符;另外,如果要用gets读入多个字符串,可以写成 while(gets(str)){......}
3、字符串中含回车
在这种情况下,如果没有题目的说明,程序无法知道哪里是字符串的分界。那么,用scanf("%c",&ch)来读,一边读,一边判断分界条件是否满足,如果满足,则把当前读到的东西存到一个字符串中。
三、输出处理
一般来讲,输出处理一般只有两个问题:空行打印问题与浮点数的精度问题;
1. 关于空行(Blank line)
很多题目都要求在输出数据的恰当位置加空行。一个空行就是一个单独的"\n"。这里,有的题目说:“After each test case, you should output one blank line”,而有的题目说:“Between each test case, you should ouput one blank line”。要注意After和Between的区别,因为如果多了一或少了空行,将导致Presentation Error甚至Wrong Answer。
(1)After
这种情况最简单,只需要输出结果后,再加一个printf("\n"),:
示例:A + B Problem (4)
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1087
C语言:
#include<stdio.h>
int main()
{
int n,sum,a;
while(scanf("%d",&n) && n)
{
sum=;
while(n--)
{
scanf("%d",&a);
sum+=a;
}
printf("%d\n",sum);
printf("\n");
}
return ;
}
C++:
#include<iostream>
using namespace std;
int main()
{
int n,sum,a;
while(cin>>n&&n)
{
sum=;
while(n--)
{
cin>>a;
sum+=a;
}
cout<<sum<<endl;
cout<<endl;
}
return ;
}
(2)Between
Between和After不同的是,最后一组结果后面不应该再加单独的"\n",应该像这样:
int i;
for (i = ; i < ; i++)
{
printf("%d\n", a);
if (i != )
printf("\n");
}
由于有时候我们并不知道测试数据有几组(比如测试数据是以end of file 结束的),用上面的方法就不行了,于是,可以换一种写法:
int a;
bool first = true;
while(scanf("%d", &a) == )
{
if (!first)
printf("\n");
else
first = false;
printf("%d\n", a);
}
这样,从第二组测试数据起,在输出每组测试数据的结果之前就会输出一个空行,和想要的效果是一样的。
2.关于精度
(1)结果保留x位小数
这种比较简单,只要 printf("%.xf\n",ans); 即可;
例如,要求保留6位小数: printf("%.6f\n",ans);
(2)没有说明要求保留几位,但要求与结果的误差不大于1e-x;
解决 : printf("%.(x+3)f\n",ans);
例如:要求与结果的误差不大于1e-9 : printf("%.12f\n",ans);
题目来源
NUPT
ACM竞赛之输入输出的更多相关文章
- ACM竞赛之输入输出(以C与C++为例)
本文转自互联网,内容.排版有修正. 欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju G ...
- [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式
ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...
- ACM竞赛高手比其他程序员水平高很多吗?
1. ACM是一种很直接的评价程序员水平的体系 2. ACM竞赛会带来很多机遇(深造or工作),同时又是一个不小的挑战 3. 为竞赛而竞赛的事情不可取 详细点击这里
- 长安大学ACM竞赛部
本博客为长安大学ACM竞赛部的公共博客,记录长大ACMer的成长点滴. 开此博客,诸君共勉.
- ACM录 之 输入输出。
—— 简单介绍一下ACM里面的输入输出... —— 主要说C++的输入输出(其实其他的我不会...). —— C++里面有输入输出流,也就是cin和cout,用起来也算是比较方便吧... —— 但是, ...
- ACM之Java输入输出
本文转自:ACM之Java输入输出 一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错 ...
- 在竞赛ACM Java处理输入输出
一.Java之ACM注意点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非 ...
- ACM竞赛常用STL(一)
全排列函数next_permutation STL 中专门用于排列的函数(可以处理存在重复数据集的排列问题) 头文件:#include <algorithm> using namespac ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
随机推荐
- C#使用SqlBulkCopy将DataTable写入数据库的表中(表不存在则创建新表,数据存在则更新,不存在则插入)
原文:.net使用SqlBulkCopy导入数据(创建新表) .net2.0后ado.net提供了一个快速导入sqlserver的方法sqlbulkcopy.导入效率非常高. 包装了一个简单的sql ...
- 实现app上对csdn的文章列表上拉刷新下拉加载以及加入缓存文章列表的功能 (制作csdn app 四)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23698511 今天继续对我们的csdn客户端未完成的功能进行实现,本篇博客接着客 ...
- 两个文件中的配置项设置方法和C比较程序处理
在实际的软件开发项目.程序经常需要翻阅了一些资料可能会改变从外部,我们需要读出的信息到一个统一的文件(一般ini档),而此文件被称为个人资料. 考虑这样一个场景,程序须要与多个数据库打交道,要从配置文 ...
- Swing之JTable的详细介绍(转)
表格(Table)的使用与介绍8-1:使用JTable组件:类层次结构图:java.lang.Object--java.awt.Component--java.awt.Container--javax ...
- Best Time to Buy and Sell Stock I,II,III [leetcode]
Best Time to Buy and Sell Stock I 你只能一个操作:维修preMin拍摄前最少发生值 代码例如以下: int maxProfit(vector<int> & ...
- 原来Github上的README.md文件这么有意思——Markdown语言详解
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 之前一直在使用github,也在上面分享了不少的项目和Demo,每次创建新项目的时候,使用的都是默认的REA ...
- JS call与apply
JS的call与apply call和apply是JS中比较重要的两个方法, 一般在框架和组件设计中用的较多,比如jQuery Code. 那么这两个方法是做什么的呢,下面我们通过代码来了解: 1 f ...
- POJ 2828 Buy Tickets(排队问题,线段树应用)
POJ 2828 Buy Tickets(排队问题,线段树应用) ACM 题目地址:POJ 2828 Buy Tickets 题意: 排队买票时候插队. 给出一些数对,分别代表某个人的想要插入的位 ...
- <八>阅读<<大话设计模式>>该模型的外观
Facade模式其实很好理解,被表面的东西展示海报.内部的东西,你不知道(因为我们有一个好包).例如,外部和公司内部制度,5交互系统,此5互.那么第一种就是外部系统和5个系统都进行交互:另外一种就是做 ...
- Linux通过使用Sambaserver示例
Linux通过使用Sambaserver示例 实验环境: Vbox下一个.Rehat5虚拟机 使用sambaserver 目的:使用sambaserver将文件上传到server上 [root@rh5 ...