c语言oj得pe,ACM入门之OJ~

c语言oj得pe,ACM入门之OJ~所谓OJ,顾名思义OnlineJudge,一个用户提交的程序在OnlineJudge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被OnlineJudge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态:通过(Ac…

大家好,又见面了,我是你们的朋友全栈君。

所谓OJ,顾名思义Online Judge,一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足一定的逻辑条件。最后系统返回给用户一个状态:通过(Accepted,AC)、答案错误(Wrong Answer,WA)、超时(Time Limit Exceed,TLE)、超过输出限制(Output Limit Exceed,OLE)、超内存(Memory Limit Exceed,MLE)、运行时错误(Runtime Error,RE)、格式错误(Presentation Error,PE)、或是无法编译(Compile Error,CE),并返回程序使用的内存、运行时间等信息。

可能看完定义还不太熟悉OJ,推荐杭电ACM1000,我们可以通过练习来巩固我们对OJ的输入输出掌握程度。

杭电ACM官网:http://acm.hdu.edu.cn/

那么接下来是关于OJ的判定:

在开始做OJ时,会面临一个输入输出数据的问题,OJ里的输入输出数据和平时的写程序不大一样。为什 么会不一样呢,这就牵涉到评测系统怎么判断你提交的程序是正确的。实际上评测系统是把程序的标准输入输 出数据都是放在文本文件里,你提交的程序会先经过编译,然后运行,从输入文件中读取数据,然后把结果输 出到一个文本文件中,评测系统再把标准的输出文件和你提交的程序运行的结果的输出文件进行对比,从而判 断你提交的程序的正确与否。既然是这样,要判断提交的程序的正确性就依赖于系统的测试数据,这时就不可 能只是用一组测试数据来判断程序的正确性,需要有很多组测试数据,而国际程序设计竞赛标准的评测系统是 PC2,它只支持一个题目一个输入数据文件、一个输出数据文件。所以这时候就得把多组测试数据放在一个文 件里,提交的程序必须把这个文件里的多组输入数据都得出结果。

一、输入: 1、只有一组测试数据,这时候是最简单的了。 C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC#include  

int main()

{  int a,b;

scanf(“%d %d”,&a, &b);

printf(“%d\n”,a+b);

return0;

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

C++语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 usingnamespace std;

3 int main()

4 {

5      int a,b;

6      cin >> a >> b;

7      cout <

8      return0;

9 }

AAffA0nNPuCLAAAAAElFTkSuQmCC

2、有多组测试数据,直到读至输入文件结尾为止,这时需要用到while(scanf(“%d”,&n)!=EOF)或while(~scanf(“%d”,&n))或while (cin>>n)。

C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include  

2 int main()

3 {

4      int a,b;

5      while(scanf(“%d %d”,&a, &b) != EOF)

6      printf(“%d\n”,a+b);

7      return0;

8  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

说明:scanf函数返回值就是读出的变量个数,如:scanf( “%d %d”, &a, &b );如果只有一个整数输入,返 回值是1,如果有两个整数输入,返回值是2,如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等

于-1。

C++语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2  usingnamespace std;

3 int main()

4  {

5     int a,b;

6     while(cin >> a >> b)

7     cout <

8     return0;

9  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

3、在开始的时候输入一个N,接下来是N组数据。 C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 int main()

3  {

4   int n,i;

5     int a,b;

6    scanf(“%d”,&n);

7     for(i=0;i

8  {

9         scanf(“%d%d”,&a,&b);

10         printf(“%d\n”,a+b);

11  }

12         return0;

13  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

或者

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 int main()

3  {

4     int n, i;

5     int a, b;

6     scanf(“%d”, &n);

7     while (n–)

8    {

9       scanf(“%d%d”, &a, &b);

10       printf(“%d\n”, a + b);

11    }

12        return0;

13  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

C++代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include  usingnamespace std; 

2 int main()

3 {

4     int a, b, n;

5     cin >> n;

6     while (n–)

7     {

8         cout <

9      }

10      return0;

11 }

AAffA0nNPuCLAAAAAElFTkSuQmCC

4、 输入不说明有多少组数据,但以某个特殊输入为结束标志。如以0 0 代表输入结束。 C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC#include  

int main()

{

int a,b;

while(scanf(“%d %d”,&a, &b) &&(a||b))

printf(“%d\n”,a+b);

}

AAffA0nNPuCLAAAAAElFTkSuQmCC

C++语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 usingnamespace std;

3 int main()

4 {

5      int a ,b;

6      while(cin>>a>>b&&(a||b))

7     {

8          cout<

9      }

10     return0;

11  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

5、还有一种是前几种的组合。 C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 int main()

3 {

4 int n,sum,a;

5      while(scanf(“%d”,&n) && n)

6      {

7      sum=0;

8     while(n–)

9     {

10     scanf(“%d”,&a);

11     sum+=a;

12      }

13  printf(“%d\n”,sum);

14     return 0;

15  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

C++语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 usingnamespace std;

3 int main()

4  {

5 int n,sum,a;

6      while(cin>>n&&n)

7     {

8         sum=0;

9         while(n–)

10     {

11     cin>>a;

12      sum+=a;

13      }

14       cout<

15      }

16  return0;

17  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

输入是一整行的字符串的,C语法:

char buf[20];

gets(buf);

如果用string buf;来保存:

getline( cin , buf );

如果用char buf[ 255 ]; 来保存:

cin.getline( 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];cin.getline(name,4,’\n’);

由于 endchar 默认已经是 ‘\n’,所以后面那行也可以写成:

cin.getline(name,4);

最后需要说明的是,C++的输入输出流用起来比较方便,但速度比C要慢得多。在输入输出量巨大时,用 C++很可能超时,应采用C的输入输出。

二、输出:

输出有不同的格式要求,不注意的话经常会出现“Presentation Error”,而且PC2很多时候还判断不出来输 出格式错误,就简单的判为”Wrong Answer”,所以输出格式一定要注意。

C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include  

2 int main()

3   //把main函数定义成int类型

4 {

5     int a,b;

6     while(scanf(“%d %d”,&a, &b) != EOF)

7     printf(“%d\n”,a+b);

8     return0;

9 }

AAffA0nNPuCLAAAAAElFTkSuQmCC

每输出一组结果换行就可以了。

2、一组接着一组,每一组后面有一空行。

C语言代码:

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 int main()

3 {

4     int a, b;

5     while (scanf(“%d%d”, &a, &b) != EOF)

6     printf(“%d\n\n”, a + b);

7     return0;

8 }

AAffA0nNPuCLAAAAAElFTkSuQmCC

每输出一组结果后输出两个换行就可以了。

3、一组接着一组,每两组之间有一个空行,注意与前一种区分开。

AAffA0nNPuCLAAAAAElFTkSuQmCC1 #include 

2 int main()

3 {

4      int n,m,sum,a;

5      int i;

6      scanf(“%d”,&n);

7      for (i =0; i 

8       {

9          scanf(“%d”,&m);

10          sum =0;

11      while (m–)

12     {

13          scanf(“%d”,&a);

14          sum +=a;

15      }

16      printf(“%d\n”,sum);

17      if (i != n-1)

18          printf(“\n”);

19    }

20      return0;

21  }

AAffA0nNPuCLAAAAAElFTkSuQmCC

判断是否到达最后一组测试数据了,如果不是最后一组测试数据就多输出一个换行

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150009.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 阿里云设置端口访问、使用_阿里云服务器端口号

    阿里云设置端口访问、使用_阿里云服务器端口号登录阿里云账号后,点击控制台点击自定义视图→再点击云服务器ECS点击实例id进入实例:点击本实例安全组:点击安全组id或者配置规则进入安全组规则配置界面,可以选择添加方式,这里以手动添加作为演示点击手动添加后,会出现添加栏,我们配置521端口,源选择0.0.0.0/0(意思是开放给所有人),最后点击保存放行端口就设置完毕了此外也可以从另一个地方进入本地实例安全组:(1)点击云服务器ECS后(上述步骤3)进入实例页面后,可以直接点击实例(2)选择自..

    2022年10月3日
  • Linux查看MySQL版本的四种方法

    Linux查看MySQL版本的四种方法1在终端下执行mysql-V2在help中查找mysql–help|grepDistrib3在mysql里查看selectversion()4在mysql里查看status欢迎补充~转自:https://www.linuxidc.com/Linux/2016-10/136075.htm…

    2022年10月27日
  • Java线程(二):线程同步synchronized和volatile

    Java线程(二):线程同步synchronized和volatile要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现。拿上篇博文中的例子来说明,在多个线程之间共享了Count类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线程栈),工作内存存储了主内存Count对象的一个副本,当线程操作Count对象时,首先从主内存复制Co…

    2022年7月15日
  • android之存储篇_存储方式总览

    作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File。由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider。  SQLite: SQLit

    2022年3月10日
  • springboot启动流程源码分析(二)

    springboot启动流程源码分析(二)

    2021年8月3日
  • idea202112激活码永久(注册激活)[通俗易懂]

    (idea202112激活码永久)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号