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)
上一篇 2022年6月17日 下午2:16
下一篇 2022年6月17日 下午2:16


相关推荐

  • 单调队列优化的背包问题[通俗易懂]

    单调队列优化的背包问题[通俗易懂]对于背包问题,经典的背包九讲已经讲的很明白了,本来就不打算写这方面问题了。但是吧。我发现,那个最出名的九讲竟然没写队列优化的背包。。。。那我必须写一下咯嘿嘿,这么好的思想。我们回顾一下背包问题吧。01背包问题题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总…

    2022年6月25日
    25
  • Android SDK下载和环境变量配置

    Android SDK下载和环境变量配置一.AndroidSDK简介AndroidSDK(SoftwareDevelopmentKit,软件开发工具包)被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。它提供了AndroidAPI库和开发工具构建,测试和调试应用程序。简单来讲,AndroidSDK可以看做用于开发和运行Android应用的一个软件。二.AndroidSDK下载1.国内的Android工具的下载网站:https://www.androiddevtools.

    2022年7月19日
    17
  • MySQL可视化工具之Navicat for MySQL

    MySQL可视化工具之Navicat for MySQL在查看 mysql 的数据时 一个好的可视化工具就显得尤为重要使用 NavicatforMy 之前请看看 MySQL 下载安装和使用教程 NavicatforMy 的下载多的不谈了 反手就是 MySQL 安装软件和补丁 链接 https pan baidu com s 1c7s2 WS2 3rYLY7nxfTTZ 提取码 8yonNavicatf 的安装

    2026年3月26日
    2
  • opencv学习—VideoCapture 类基础知识「建议收藏」

    opencv学习—VideoCapture 类基础知识「建议收藏」以下是对两位大神的博客进行简单整理得到:http://blog.csdn.net/weicao1990/article/details/53379881http://blog.csdn.net/guduruyu/article/details/68486063便于为需要的同学解惑,便于自己以后复习!      在opencv中关于视频的读操作是通过

    2022年4月19日
    52
  • C语言关键字之voliate

    C语言关键字之voliateC语言关键字之voliatevoliate的作用是作为指令关键字,确保本条指令不会因为编译器的优化而省略,而且要求每次从内存中直接读取值当使用voliate声明变量值时,系统总是重新从它所在的内存读取数据,直接访问变量地址,而编译器对于访问该变量时也不再进行优化voliate关键字影响编译器的结果,用voliate声明的变量表示该变量随时可能发生变化(因为编译器优化时可能将其放入寄存器中),与…

    2022年5月6日
    70
  • webP用法

    webP用法WEBP 是什么呢 WEBP nbsp 是 google 推出的意图改变 web 图片 JPG PNG GIF 三分天下局势的一种图片格式 它不仅支持无损或有损压缩 alpha 通道 还支持动画演示 在同画质的情况下 webp 格式图片占用体积相较于 jpg 图片大约减少 40 相较于无损 png 图片大约减少 30 具不完全统计 互联网流量中 60 都产生于图片 如果能用上 webp 格式 网站的访问速度将会大大提升 兼容及

    2026年3月17日
    2

发表回复

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

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