想要学好程序设计第一是要养成你的编程思维,也就是你对编程的一种概念和思维定式,长期的解题会让你产生解题经验进而形成一种思维定式,比如看到一个题目就立即想出这题要用什么方法解题这样。编程思维我认为还包括你的数学理念,这样你就可以从不同的角度去思考问题,简化问题,从而很好地帮助你解题。第二点就是排错能力,这点尤为重要,我把几种程序错误来列举一下,大约有5种常见的典型错误,从特殊到一般说说我的解决方法。
一、OLE
OLE,也就是多余输出,这种错误基本上出现在while not eof 和0尾版之中,有的题目并未指明是0尾版,如果用了while not eof 就会出现这种情况,通常改成0尾版即可解决。如zerojudge上的a282一题,并未指明是0尾版,但是用while not eof就会出现OLE的情况,其实此题只需遇到0不输出即可,也不需使用0尾版。
二、RE
RE,通常是因为超出数据范围或数据类型错误时出现,需修改或扩大数据类型,然而超大数题目还用int64去解的话恐怕就要换一种思路了。
三、TLE
TLE,也就是超时,遇到此类情况就要尽可能地去减少程序的开销,达到解题时间的减少,但如果实在不行的话,恐怕也得像a007一样换种思路解题了。
四、CE
CE,编译错误,这种问题很好解决,只需在freepascal中调试,查看窗口下方报错信息就OK了。
五、WA/NA
WA/NA,这是最普遍的一种错误,也就是程序运算错误,相对而言,从排错方面就很难去解决,我通常采用的方法称为“分布输出辨错法”。就以zerojudge上的c039 the 3n+1 problem 为例。
var
  a,b,k,t,i,n,h,h2,t2:longint;
  f,d:boolean;
begin
  while not eof do begin
    readln(n,b);
    h:=n;
    h2:=b;
    if n>b then begin
       n:=b;
       b:=h;
    end;
    for i:=n to b do begin
      a:=i;
      f:=true;
      d:=true;
      k:=a;
      t:=0;
      if a=1 then f:=false;
      while f and d do begin
        if a mod 2 =0 then a:=a div 2
                      else a:=3*a+1;
        t:=t+1;
        if a=k then d:=false
               else if a=1 then f:=false;
      end;
      if t>t2 then t2:=t;
    end;
    writeln(h,' ',h2,' ',t2+1);
    t2:=0;
  end;
end.
以上为此题的正确代码,如果误将
if a mod 2 =0 then a:=a div 2
              else a:=3*a+1;
的div写成mod,这必然会影响到后面的运算,如果在纯用肉眼去看无法发现时(有时的确脑袋卡壳这点问题都发现不了),就在这后面加个输出writeln(a);这就可以很直观这看出a的变化情况,很好的减低了辨错的难度,进而获得AC。
总而言之,编程能力是要靠不断地学习和解题才能提升的,不断地总结,才能进步~~
 
陈申奥:现就读于顾村中学,五个月的时间里在ZEROJUDGE中解出了二百二十多道题,目前已解出三百七十多道题,2015年NOIP普及组一等奖(上海市排名第十五)。陈申奥对题目的理解和分析能力相当惊人,他在程序设计学习方面付出的努力和面对难题不言放弃的毅力值得我们学习。

我的ZJ解题心得的更多相关文章

  1. leetcode网解题心得——61. 旋转链表

    目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ...

  2. wechall.net/stegano 解题心得

    /* 转载请注明出处:http://www.cnblogs.com/Martinium/p/wechall_stegano.html */ 最近迷上了 www.wechall.net 网站,里面都是些 ...

  3. Zerojudge解题心得

    我进入娄山中学已经有1年多了,也就是说我学习编程也有1年多了,在这一年多的时间中,我已经对编程有了初步的了解.其实只要抓住平时的空闲时间加以利用,哪怕每个星期就做那么三四题,经过了一段时间沉淀,也会有 ...

  4. POJ1159解题心得

    题目:http://poj.org/problem?id=1159 刚开始,从样例的特征去思考.总让我从回文数的角度去思考,想出几个方案,可都用了数据去检验,发现不行.如:ABCDDCB,BACDCA ...

  5. 树状数组:CDOJ1583-曜酱的心意(树状数组心得)

    曜酱的心意 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 131072/131072KB (Java/Others) Description ...

  6. hdu 1159:Common Subsequence(动态规划)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. 九度OJ—题目1032:ZOJ

    题目描写叙述: 读入一个字符串.字符串中包括ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出.当某个字符用完时,剩下的仍然依照ZOJ的顺序输出. 输入: 题目包括多组用例,每组用例占一行,包括ZOJ ...

  8. 题目1203:IP地址

    题目: http://ac.jobdu.com/problem.php?pid=1203 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3052 解决:1504 题目描述: 输入一个ip地 ...

  9. HDU 2602 Bone Collector WA谁来帮忙找找错

    Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collec ...

随机推荐

  1. iOS开发Swift篇—(十)方法

    iOS开发Swift篇—(十)方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 ( ...

  2. Install Java1.6

    声明:一下内容主要来自网络,本来在此基础上根据自己的成功经验做了一些浅陋的(但有价值的)备注说明和修改. (本人也是ubuntu 11.10版本,但是是64位的,因此安装的java也是64位版本.) ...

  3. SecureCRT清屏

    Ctrl + l:清屏Ctrl + c:终止命令Ctrl + z:挂起命令

  4. Python使用CGIHTTPServer调用shell作为cgi脚本

    #!/bin/bash echo "Content-Type:text/html" echo "" echo "hello world!" ...

  5. 黑马程序员:Java编程_异常

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 异常即对问题的描述,将问题进行对象的封装. 1. 异常体系:Throwable ...

  6. 前端开发环境搭建 Grunt Bower、Requirejs 、 Angular

    现在web开发的趋势是前后端分离.前端采用某些js框架,后端采用某些语言提供restful API,两者以json格式进行数据交互. 如果后端采用node.js,则前后端可以使用同一种语言,共享某些可 ...

  7. Javascript DOM基础(二) childNodes、children

    childNodes知识点: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Typ ...

  8. 简单的JS多物体的运动---运动和透明度的变化

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. PHP中常用的函数

    1.php 字符串截取函数 2.php取得当前时间函数 3.php 字符串长度函数 4.几种php 删除数组元素方法 5.php中var_dump()函数的详解说明 6.PHP preg_match正 ...

  10. iOS开发ARC内存管理

    本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃 ...