ACM基本输⼊输出
在开始做ACM时,会⾯临⼀个输⼊输出数据的问题,ACM⾥的输⼊输出数据和平时的写程序不⼤⼀样。为什么会不⼀样呢,这就牵涉到评测系统怎么判断你提交的程序是正确的。实际上评测系统是把程序的标准输⼊输出数据都是放在⽂本⽂件⾥,你提交的程序会先经过编译,然后运⾏,从输⼊⽂件中读取数据,然后把结果输出到⼀个⽂本⽂件中,评测系统再把标准的输出⽂件和你提交的程序运⾏的结果的输出⽂件进⾏对⽐,从⽽判断你提交的程序的正确与否。既然是这样,要判断提交的程序的正确性就依赖于系统的测试数据,这时就不可能只是⽤⼀组测试数据来判断程序的正确性,需要有很多组测试数据,⽽国际ACM⽐赛标准的评测系统是,它只⽀持⼀个题⽬⼀个输⼊数据⽂件、⼀个输出数据⽂件。所以这时候就得把多组测试数据放在⼀个⽂件⾥,提交的程序必须把这个⽂件⾥的多组输⼊数据都得出结果。
⼀、输⼊:
  1、只有⼀组测试数据,这时候是最简单的了,请看题⽬。
C语⾔代码:
#include < stdio.h >
int main()
{
int a,b;
scanf("%d %d",&a, &b);
printf("%d\n",a+b);
return0;
}
C++语⾔代码:
#include < iostream >
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << a+b << endl;
return0;
}
  2、有多组测试数据,直到读⾄输⼊⽂件结尾为⽌,这时需要⽤到while(scanf("%d",&n)!=EOF)或while (cin>>n),请看题⽬:。
C语⾔代码:
#include < stdio.h >
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
return0;
}
说明:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有⼀个整数输⼊,返回值是1,如果有两个整数输⼊,返回值是2,如果⼀个都没有,则返回值是-1。EOF是⼀个预定义的常量,等于-1。
C++语⾔代码:
#include < iostream >
using namespace std;
int main()
{
int a,b;
while(cin >> a >> b)
cout << a+b << endl;
return0;
}
 3、在开始的时候输⼊⼀个N,接下来是N组数据,请看题⽬:。
C语⾔代码:
#include<stdio.h>
int main()
{
int n,i;
int a,b;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
return0;
}
或者
#include<stdio.h>
int main() {
int n, i;
int a, b;
scanf("%d", &n);
c 字符串数组怎么定义
while (n--) {
scanf("%d%d", &a, &b);
printf("%d\n", a + b);
}
return0;
}
C++代码:
#include <iostream>
using namespace std;
int main() {
int a, b, n;
cin >> n;
while (n--) {
cout << a + b << endl;
}
return0;
}
  4、输⼊不说明有多少组数据,但以某个特殊输⼊为结束标志。请看题⽬:,这个题⽬是以0 0 代表输⼊结束。C语⾔代码:
#include <stdio.h>
int main()
{
int a,b;
while(scanf("%d %d",&a, &b) &&(a||b))
printf("%d\n",a+b);
}
C++语⾔代码:
#include<iostream>
using namespace std;
int main()
{
int a ,b;
while(cin>>a>>b&&(a||b))
{cout<<a+b<<endl;}
return0;
}
  5、还有⼀种是前⼏种的组合,请看题⽬:。
C语⾔代码:
#include<stdio.h>
int main()
{
int n,sum,a;
while(scanf("%d",&n) && n)
{
sum=0;
while(n--)
{
scanf("%d",&a);
sum+=a;
}
printf("%d\n",sum);
}
return0;
}
C++语⾔代码:
#include<iostream>
using namespace std;
int main()
{
int n,sum,a;
while(cin>>n&&n)
{
sum=0;
while(n--)
{
}
cout<<sum<<endl;
}
return0;
  6、输⼊字符串。 
    输⼊是⼀整⾏的字符串的,C语法:
    char buf[20];
    gets(buf);
    C++语法:
    如果⽤string buf;来保存:
  getline( cin , buf );
    如果⽤char buf[ 255 ]; 来保存:
  line( buf, 255 );
       scanf(“ %s%s”,str1,str2),在多个字符串之间⽤⼀个或多个空格分隔;
    若使⽤gets函数,应为gets(str1); gets(str2); 字符串之间⽤回车符作分隔。
    通常情况下,接受短字符⽤scanf函数,接受长字符⽤gets函数。
     ⽽getchar函数每次只接受⼀个字符,经常c=getchar()这样来使⽤。
    getline 是⼀个函数,它可以接受⽤户的输⼊的字符,直到已达指定个数,或者⽤户输⼊了特定的字符。它的函数声明形式(函数原型)如下:  istream& getline(char line[], int size, char endchar = '\n');
    不⽤管它的返回类型,来关⼼它的三个参数:
    char line[]:就是⼀个字符数组,⽤户输⼊的内容将存⼊在该数组内。
    int size : 最多接受⼏个字符?⽤户超过size的输⼊都将不被接受。
    char endchar :当⽤户输⼊endchar指定的字符时,⾃动结束。默认是回车符。
    结合后两个参数,getline可以⽅便地实现:⽤户最多输⼊指定个数的字符,如果超过,则仅指定个数的前⾯字符有效,如果没有超过,则⽤户可以通过回车来结束输⼊。    char name[4];line(name,4,'\n');
    由于 endchar 默认已经是 '\n',所以后⾯那⾏也可以写成:
    line(name,4);
    最后需要说明的是,C++的输⼊输出流⽤起来⽐较⽅便,但速度⽐C要慢得多。在输⼊输出量巨⼤时,⽤C++很可能超时,应采⽤C的输⼊输出。
⼆、输出:
  输出有不同的格式要求,不注意的话经常会出现“Presentation Error”,⽽且PC2很多时候还判断不出来输出格式错误,就简单的判为"Wrong Answer",所以输出格式⼀定要注意。
  1、⼀组输出接着⼀组输出,中间没有空⾏,这也是最简单的,请看题⽬。
C语⾔代码:
#include < stdio.h >
int main()  //把main函数定义成int类型
{
int a,b;
while(scanf("%d %d",&a, &b) != EOF)
printf("%d\n",a+b);
return0;
}
每输出⼀组结果换⾏就可以了。
  2、⼀组接着⼀组,每⼀组后⾯有⼀空⾏。请看
C语⾔代码:
#include<stdio.h>
int main() {
int a, b;
while (scanf("%d%d", &a, &b) != EOF)
printf("%d\n\n", a + b);
return0;
}
每输出⼀组结果后输出两个换⾏就可以了。
  3、⼀组接着⼀组,每两组之间有⼀个空⾏,注意与前⼀种区分开,请看题⽬ 
#include<stdio.h>
int main() {
int n,m,sum,a;
int i;
scanf("%d",&n);
for (i = 0; i < n;i++) {
scanf("%d",&m);
scanf("%d",&a);
sum +=a;
}
printf("%d\n",sum);
if (i != n-1)
printf("\n");
}
return0;
}
判断是否到达最后⼀组测试数据了,如果不是最后⼀组测试数据就多输出⼀个换⾏

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。