论点一: Runtime Error

这个在OpenJudge中可能很常见,但最多的情况为:数组开小了、运行时间过长(代码冗长、方法没用对、情况考虑不到位以至于计算范围得扩大)等等
例如:

状态: Runtime Error
源代码:
//此题解为 02:奇数单增序列

include<cstdio>
include<algorithm>
using namespace std;
int a[10],b[10];
int main()
{int m=0,x=0,y=0;int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++){if(a[i]%2!=0) {x++;b[x]=a[i];}}sort(b,b+x+1);for(int i=1;i<=x-1;i++)printf("%d,",b[i]);printf("%d",b[x]);}

修改后:

状态: Accepted

#include<cstdio>
#include<algorithm>
using namespace std;
int a[5000],b[5000];
int main()
{int m=0,x=0,y=0;int n;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++){if(a[i]%2!=0) {x++;b[x]=a[i];}}sort(b,b+x+1);for(int i=1;i<=x-1;i++)printf("%d,",b[i]);printf("%d",b[x]);}

察觉方法:1.注意读题,一般在题中都会提到某些未知数的范围,这时,我们就要注意,在开始写代码的时候就将数组大小调整好.也可以在代码写完后再读题、查错(但不建议这么做)。当然,还有一些‘懒猪’,在一开始时就将数组开得特别大(比如说。。。我~),但是,虽说这么做方便、快捷,但有时,还是会消耗许多时间,浪费许多空间。所以,我们都得一起努力,改掉这些坏习惯。(有则改之,无则加勉)
在最后,我再给大家举一个典型的例子(数组开小):

状态: Runtime Error
源代码
//此题为 7218:献给阿尔吉侬的花束

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[400][400],n,m,i,j;
int head,tail,q[40005],p[40005],x,y,x1,y1,b[40005];
int xx[10]={-1,0,1,0},yy[10]={0,-1,0,1};
int main()
{   int l;scanf("%d",&l);while(l--){scanf("%d%d",&m,&n);memset(f,0,sizeof(f));//清空 memset(b,0,sizeof(b));//清空 memset(p,0,sizeof(p));//清空 memset(q,0,sizeof(q));//清空 for (i=1;i<=m;i++){char c[100];//***同志们注意看这里***scanf("%s",c);//输入矩阵 for(j=1;j<=n;j++){if (c[j-1]=='.')f[i][j]=1;if (c[j-1]=='#')f[i][j]=0;if (c[j-1]=='S'){x=i; y=j;f[i][j]=1;//并改为1 }if (c[j-1]=='E'){x1=i; y1=j;f[i][j]=1;}}}head=0;tail=1;p[tail]=x;q[tail]=y;b[tail]=0;// i,j 初始位置 bool pd=0;while (head<tail){head++;for(i=0;i<=3;i++){int l=xx[i]+p[head];int r=yy[i]+q[head];if (l>0&&l<=m&&r>0&&r<=n&&f[l][r]==1){f[l][r]=0;tail++;  p[tail]=l; q[tail]=r; b[tail]=b[head]+1;}if (l==x1&&r==y1){cout<<b[tail]<<endl;pd=1;break;}}if (pd==true)break;}if (pd==false)cout<<"oop!"<<endl;}}

修改后:

状态: Accepted
源代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f[400][400],n,m,i,j;
int head,tail,q[40005],p[40005],x,y,x1,y1,b[40005];
int xx[10]={-1,0,1,0},yy[10]={0,-1,0,1};
int main()
{   int l;scanf("%d",&l);while(l--){scanf("%d%d",&m,&n);memset(f,0,sizeof(f));//清空 memset(b,0,sizeof(b));//清空 memset(p,0,sizeof(p));//清空 memset(q,0,sizeof(q));//清空 for (i=1;i<=m;i++){char c[4000];scanf("%s",c);//输入矩阵 for(j=1;j<=n;j++){if (c[j-1]=='.')f[i][j]=1;if (c[j-1]=='#')f[i][j]=0;if (c[j-1]=='S'){x=i; y=j;f[i][j]=1;//并改为1 }if (c[j-1]=='E'){x1=i; y1=j;f[i][j]=1;}}}head=0;tail=1;p[tail]=x;q[tail]=y;b[tail]=0;// i,j 初始位置 bool pd=0;while (head<tail){head++;for(i=0;i<=3;i++){int l=xx[i]+p[head];int r=yy[i]+q[head];if (l>0&&l<=m&&r>0&&r<=n&&f[l][r]==1){f[l][r]=0;tail++;  p[tail]=l; q[tail]=r; b[tail]=b[head]+1;}if (l==x1&&r==y1){cout<<b[tail]<<endl;pd=1;break;}}if (pd==true)break;}if (pd==false)cout<<"oop!"<<endl;}}

当然,数组开小并不是唯一的错误,像运行时间过长(代码冗长、方法没用对、情况考虑不到位以至于计算范围得扩大)这些问题还是存在的,但这些问题的解决方案也还是只有自己,修改代码。就像在做广搜的题时,你用深搜的方法去做,一一列举,如此,就有可能时间超限。

论 C++ 在OpenJudge中做题的易错点(一)相关推荐

  1. 一位粗心的同学在用计算机计算某题时,浅谈如何纠正小学生在数学中做题粗心的问题...

    浅谈如何纠正小学生在数学中做题粗心的问题 宝塔区南关小学课题组 李 乐 摘 要:粗心,是孩子的通病,低年级学生尤为突出.粗心问题是学生错题.导致学习成绩不好的最主要原因,如何纠正学生做题粗心的问题,是 ...

  2. Java是先难后易吗_做题先易后难,干活先难后易

    1 事儿难长智慧, 事儿易生愚昧. 2 诞生容易,做好人难: 说话容易,把话说好难: 走平道容易,上天入地都难: 吃饭容易,种地掙钱都难: 学过的容易,没学的都难: 事做起来容易,不做都难: 吃胖容易 ...

  3. js逻辑训练题_二建冲刺必刷300题!精选历年真题+母子题+模考易错题!

    订阅公众号,回复[口诀],获取完整版实务口诀 你是不是常常疑惑为什么同样在做题,同样熬通宵,同样很努力,为什么有人顺利拿证,有人却因几分之差黯然落榜? 因为二建不仅拼努力的程度,更要拼对精准二建信息的 ...

  4. java 3_4_5判断三角形_小学四年级数学下册【填空题】易错题专项训练

    原标题:小学四年级数学下册[填空题]易错题专项训练 易错题训练(填空题)1 1.把1米平均分成10分,每份是,用分数表示是,用小数表示是 2.50个0.1和4个0.01组成的数是. 3.10.496精 ...

  5. 计算机失误,计算机做题的易出现的失误

    根据小编所收集到的资料 为大家做了个详细整理!大家要认真阅读哦! 1.答题时间安排不合理.一般正常先做选择题,再做操作题.其中操作题一般有3道大题,正常情况下,3道大题也是按照顺序完成的.但是如果第一 ...

  6. BUPT数电爱课堂概念题_易错点_错题 汇总

    脱单干嘛?数电ta不香嘛 第一周 第二周 第三周 第四周 第五周 第六周 第七周(待更新,还没写完,大家期中考试加油!) 第一周 在这里在这里https://blog.csdn.net/JCMLSY/ ...

  7. 每日一题(易错):这条SQL语句,有什么作用?

    以下在数据库中执行的语句,有什么作用:GRANT update ON enmotech TO eygle WITH GRANT OPTION; A.用户eygle被授予在这个对象上的所有权限; B.一 ...

  8. c语言指针编程易错点,C语言中指针的一些易错点!

    1.字符数组与字符串的使用 注意:数组名是指向数组首个元素的地址. 先看个例子: #include int main() { char *str = "hello"; int le ...

  9. 每日一题(易错):哪些REPEAT_INTERVAL参数能够实现每30分钟运行job

    你希望每30分钟运行job.下列哪些REPEAT_INTERVAL参数能够实现这一目标? A.'freq=minutely;byminute=30' B.'freq=hourly;interval=1 ...

最新文章

  1. java lamdba表达式效率_java8新特性Lambda表达式为什么运行效率低
  2. mysql 1005 错误
  3. 数论 - 简单数位推理 --- NYIST 514
  4. 编译GSLSDevil的全过程
  5. 地摊经济和夜经济-国情讲坛·周荣江:城市生态谋定治理转型
  6. 数学图形(2.18)Hyperbolical conical spiral双曲圆锥螺线
  7. P2839 [国家集训队]middle(二分 套 主席树)
  8. from + size must be less than or equal to: [10000] but was [10550]
  9. 信息安全工程师笔记-综合知识冲刺(四)
  10. kettle-多文件合并
  11. 使用 Eclipse 插件部署 Java 应用
  12. matlab矩阵的表示和简单操作
  13. sketchup的SKP格式转到导入supermap需要的GLTF格式
  14. signature=cc1c224e1386c7abfb9e93371b44eda6,Ultrafast hot-carrier-dominated photocurrent in graphene
  15. 期货期权股票资管分仓系统
  16. IdentityServer4揭秘---Consent(同意页面)
  17. mysql精度_MySQL几种数据类型精度和标度的情况
  18. python3.5中import cv2报错
  19. 什么是B/S开发技术?
  20. 高一上计算机思维导图,高一上思维导图

热门文章

  1. 计算年龄:根据生日时间戳,获得目前的年龄
  2. Jboss账号密码、jboss网站跟目录、Jboss弱口令
  3. 安装报警防盗监控系统 提高安全意识
  4. 博士申请 | 北京大学分子影像/医学智能实验室招收AI/CV方向博士/硕士
  5. 东莞精密塑胶模具生产制造的工艺流程
  6. 用心整理值得收藏的30道Python练手题(附详细答案)
  7. 人生第一篇博客——小试牛刀
  8. jsp ${param.id}用法
  9. 材料与工程学科相关软件
  10. MATLAB随机数产生方法