国际大学生程序设计大赛(ACM-icpc)输入输出介绍
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sample Input START NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END START N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ END START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END ENDOFINPUT
2020/9/9
16
本类输入解决方案:
C语法: char buf[20]; gets(buf);
C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char buf[ 255 ]; 来保存: cin.getline( buf, 255 );
2020/9/9
int main()
{
int icase,n,i,j,a,sum;
scanf("%d",&icase);
for(i=0;i<icase;i++)
{
sum=0;
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%d",&a);
sum+=a;
}
if(i<icase-1)
2020/9/9
11
本类输入解决方案:
C语法:
scanf("%d",&n) ;
for( i=0 ; i<n ; i++ ) {
.... }
C++语法:
cin >> n; for( i=0 ; i<n ; i++ ) {
.... }
2020/9/9
12
输入第三类:
输入不说明有多少个Input Block,但以某个特殊输入为结束标志。
char name[4]; cin.getline(name,4,'\n'); 由于 endchar 默认已经是 '\n',所以后面那行也
可以写成: cin.getline(name,4);
2020/9/9
20
练习:
以下题目属于哪一类输入?
POJ_1423 /JudgeOnline/problem?id=1423
2020/9/9
21
输出的问题:
一个Input Block对应一个Output Block,Output Block之间空行。
ex-4
Problem Description Your task is to calculate the sum of some integers.
Input Input contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.
2020/9/9
4
有什么问题呢?
这就是下面需要解决的问题
基本输入输出
2020/9/9
5
输入第一类:
输入不说明有多少个Input Block, 以EOF为结束标志。 参见:ex-1.
2020/9/9
6
ex-1源代码:
#include <stdio.h> int main() {
int a,b; while(scanf("%d %d",&a, &b) != EOF)
Sample output 6 30
2020/9/9
13
ex-3源代码:
#include <stdio.h> int main() {
int a,b;
while(scanf("%d %d",&a, &b) &&(a!=0 && b!=0))
printf("%d\n",a+b); }
上面的程序有什么问题? 杜绝低级错误!
printf("%d\n",a+b); }
2020/9/9
7
本类输入解决方案:
C语法:
while(scanf("%d %d",&a, &b) != EOF)
{ ....
} C++语法:
while( cin >> a >> b ) {
.... }
2020/9/9
8
说明:
1. Scanf函数返回值就是读出的变量个数,如: scanf( “%d %d”, &a, &b ); 如果a和b都被成功读入整数,那么scanf的返回 值就是2; 如果只有a被成功读入整数,返回值为1; 如果a和b都未被成功读入整数,返回值为0; 如果遇到错误或遇到end of file,返回值为EOF
2020/9/9
14
本类输入解决方案:
如果最后一行是以一个0结尾则: C语法:
while(scanf("%d",&n) && n!=0 ) {
.... }
C++语法: while( cin >> n && n != 0 ) { .... }
2020/9/9
15
输入第四类:
输入是一整行的字符串的 参见:POJ_1298 /JudgeOnline/problem?id=1298
Sample output 10
15
6
2020/9/9
22
以下方法什么问题?
C语法: { .... printf("%d\n\n",ans); }
C++语法: { ... cout << ans << endl << endl; }
2020/9/9
23
Ex-4正确源代码
#include <stdio.h>
ACM程序设计
输入输出格式
2020/9/9
1
ACM题目特点
由于ACM竞赛题目的输入数据和输 出数据一般有多组(不定),并且格式 多种多样,所以,如何处理题目的输入 输出是对大家的一项最基本的要求。这 也是困扰初学者的一大问题。
下面,分类介绍:
2020/9/9
2
一个超级简单的题目(ex-1):
Problem Description Your task is to calculate a + b.
2. EOF是一个预定义的常量,等于-1。
2020/9/9
9
输入第二类:
输入一开始就会说有N个Input Block,下面接着是N个Input Block。
ex-2
Problem Description Your task is to calculate a + b.
Input Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair 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 2 15 10 20
2020/9/9
ቤተ መጻሕፍቲ ባይዱ18
说明:cin.getline的用法
getline 是一个函数,它可以接受用户的输入的字符,直到已达 指定个数,或者用户输入了特定的字符。它的函数声明形式(函 数原型)如下:
istream& getline(char line[], int size, char endchar = '\n'); 不用管它的返回类型,来关心它的三个参数: char line[]: 就是一个字符数组,用户输入的内容将存入在该数
pid1017初学者常见问题初学者常见问题2013121727编译错误?main函数必须返回int类型正式比赛?不要在for语句中定义类型?int64不支持可以用longlong代替?使用了汉语的标点符号数?itoa不是ansi函数能将整数转换为字符串而且与ansi标准兼容的方法是使用sprintf函数intnum100
组内。 int size : 最多接受几个字符?用户超过size的输入都将不被接受。 char endchar :当用户输入endchar指定的字符时,自动结束。默
认是回车符。
2020/9/9
19
说明续
结合后两个参数,getline可以方便地实现: 用户 最多输入指定个数的字符,如果超过,则仅指定 个数的前面字符有效,如果没有超过,则用户可 以通过回车来结束输入。
printf("%d\n\n",sum);
else
printf("%d\n",sum);
}
}
2020/9/9
24
解决办法:
C语法: for (k=0;k<count;k++) { while (…) { printf(" %d\n",result); } if (k!=count-1) printf("\n"); }
ex-3
Problem Description Your task is to calculate a + b.
Input Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.
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 15 10 20 00
POJ_1519 /JudgeOnline/problem?id=1519
更多类型 /showproblem.php?pid=1092 /showproblem.php?pid=1093 /showproblem.php?pid=1094
Sample output 6 30
2020/9/9
10
ex-2源代码:
#include <stdio.h> int main() {
int n,i,a,b; scanf("%d",&n); for(i=0;i<n;i++) {
scanf("%d %d",&a, &b); printf("%d\n",a+b); } }
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.
Output For each group of input integers you should output their sum in one line, and you must note that there is a blank line between outputs.
Sample input 3 41234 512345 3123
Sample input 15 10 20
Sample output 6 30
2020/9/9
3
初学者很常见的一种写法:
#include<stdio.h> void main() { int a,b; scanf(“%d %d”,&a,&b); Printf(“%d”,a+b); }
17
说明:
scanf(“ %s%s”,str1,str2),在多个字符串之间用 一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字 符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长 字符用gets函数。
而getchar函数每次只接受一个字符,经常 c=getchar()这样来使用。
2020/9/9
16
本类输入解决方案:
C语法: char buf[20]; gets(buf);
C++语法: 如果用string buf;来保存: getline( cin , buf ); 如果用char buf[ 255 ]; 来保存: cin.getline( buf, 255 );
2020/9/9
int main()
{
int icase,n,i,j,a,sum;
scanf("%d",&icase);
for(i=0;i<icase;i++)
{
sum=0;
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%d",&a);
sum+=a;
}
if(i<icase-1)
2020/9/9
11
本类输入解决方案:
C语法:
scanf("%d",&n) ;
for( i=0 ; i<n ; i++ ) {
.... }
C++语法:
cin >> n; for( i=0 ; i<n ; i++ ) {
.... }
2020/9/9
12
输入第三类:
输入不说明有多少个Input Block,但以某个特殊输入为结束标志。
char name[4]; cin.getline(name,4,'\n'); 由于 endchar 默认已经是 '\n',所以后面那行也
可以写成: cin.getline(name,4);
2020/9/9
20
练习:
以下题目属于哪一类输入?
POJ_1423 /JudgeOnline/problem?id=1423
2020/9/9
21
输出的问题:
一个Input Block对应一个Output Block,Output Block之间空行。
ex-4
Problem Description Your task is to calculate the sum of some integers.
Input Input contains an integer N in the first line, and then N lines follow. Each line starts with a integer M, and then M integers follow in the same line.
2020/9/9
4
有什么问题呢?
这就是下面需要解决的问题
基本输入输出
2020/9/9
5
输入第一类:
输入不说明有多少个Input Block, 以EOF为结束标志。 参见:ex-1.
2020/9/9
6
ex-1源代码:
#include <stdio.h> int main() {
int a,b; while(scanf("%d %d",&a, &b) != EOF)
Sample output 6 30
2020/9/9
13
ex-3源代码:
#include <stdio.h> int main() {
int a,b;
while(scanf("%d %d",&a, &b) &&(a!=0 && b!=0))
printf("%d\n",a+b); }
上面的程序有什么问题? 杜绝低级错误!
printf("%d\n",a+b); }
2020/9/9
7
本类输入解决方案:
C语法:
while(scanf("%d %d",&a, &b) != EOF)
{ ....
} C++语法:
while( cin >> a >> b ) {
.... }
2020/9/9
8
说明:
1. Scanf函数返回值就是读出的变量个数,如: scanf( “%d %d”, &a, &b ); 如果a和b都被成功读入整数,那么scanf的返回 值就是2; 如果只有a被成功读入整数,返回值为1; 如果a和b都未被成功读入整数,返回值为0; 如果遇到错误或遇到end of file,返回值为EOF
2020/9/9
14
本类输入解决方案:
如果最后一行是以一个0结尾则: C语法:
while(scanf("%d",&n) && n!=0 ) {
.... }
C++语法: while( cin >> n && n != 0 ) { .... }
2020/9/9
15
输入第四类:
输入是一整行的字符串的 参见:POJ_1298 /JudgeOnline/problem?id=1298
Sample output 10
15
6
2020/9/9
22
以下方法什么问题?
C语法: { .... printf("%d\n\n",ans); }
C++语法: { ... cout << ans << endl << endl; }
2020/9/9
23
Ex-4正确源代码
#include <stdio.h>
ACM程序设计
输入输出格式
2020/9/9
1
ACM题目特点
由于ACM竞赛题目的输入数据和输 出数据一般有多组(不定),并且格式 多种多样,所以,如何处理题目的输入 输出是对大家的一项最基本的要求。这 也是困扰初学者的一大问题。
下面,分类介绍:
2020/9/9
2
一个超级简单的题目(ex-1):
Problem Description Your task is to calculate a + b.
2. EOF是一个预定义的常量,等于-1。
2020/9/9
9
输入第二类:
输入一开始就会说有N个Input Block,下面接着是N个Input Block。
ex-2
Problem Description Your task is to calculate a + b.
Input Input contains an integer N in the first line, and then N lines follow. Each line consists of a pair 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 2 15 10 20
2020/9/9
ቤተ መጻሕፍቲ ባይዱ18
说明:cin.getline的用法
getline 是一个函数,它可以接受用户的输入的字符,直到已达 指定个数,或者用户输入了特定的字符。它的函数声明形式(函 数原型)如下:
istream& getline(char line[], int size, char endchar = '\n'); 不用管它的返回类型,来关心它的三个参数: char line[]: 就是一个字符数组,用户输入的内容将存入在该数
pid1017初学者常见问题初学者常见问题2013121727编译错误?main函数必须返回int类型正式比赛?不要在for语句中定义类型?int64不支持可以用longlong代替?使用了汉语的标点符号数?itoa不是ansi函数能将整数转换为字符串而且与ansi标准兼容的方法是使用sprintf函数intnum100
组内。 int size : 最多接受几个字符?用户超过size的输入都将不被接受。 char endchar :当用户输入endchar指定的字符时,自动结束。默
认是回车符。
2020/9/9
19
说明续
结合后两个参数,getline可以方便地实现: 用户 最多输入指定个数的字符,如果超过,则仅指定 个数的前面字符有效,如果没有超过,则用户可 以通过回车来结束输入。
printf("%d\n\n",sum);
else
printf("%d\n",sum);
}
}
2020/9/9
24
解决办法:
C语法: for (k=0;k<count;k++) { while (…) { printf(" %d\n",result); } if (k!=count-1) printf("\n"); }
ex-3
Problem Description Your task is to calculate a + b.
Input Input contains multiple test cases. Each test case contains a pair of integers a and b, one pair of integers per line. A test case containing 0 0 terminates the input and this test case is not to be processed.
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 15 10 20 00
POJ_1519 /JudgeOnline/problem?id=1519
更多类型 /showproblem.php?pid=1092 /showproblem.php?pid=1093 /showproblem.php?pid=1094
Sample output 6 30
2020/9/9
10
ex-2源代码:
#include <stdio.h> int main() {
int n,i,a,b; scanf("%d",&n); for(i=0;i<n;i++) {
scanf("%d %d",&a, &b); printf("%d\n",a+b); } }
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.
Output For each group of input integers you should output their sum in one line, and you must note that there is a blank line between outputs.
Sample input 3 41234 512345 3123
Sample input 15 10 20
Sample output 6 30
2020/9/9
3
初学者很常见的一种写法:
#include<stdio.h> void main() { int a,b; scanf(“%d %d”,&a,&b); Printf(“%d”,a+b); }
17
说明:
scanf(“ %s%s”,str1,str2),在多个字符串之间用 一个或多个空格分隔;
若使用gets函数,应为gets(str1); gets(str2); 字 符串之间用回车符作分隔。
通常情况下,接受短字符用scanf函数,接受长 字符用gets函数。
而getchar函数每次只接受一个字符,经常 c=getchar()这样来使用。