“爱运动管理系统”诞生记(6)

爱运动管理系统”诞生记(6)

巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo

第二篇文章写于2006417日,这是我在“编程爱好者论坛”的活跃期,经过快一年的学习,我的编程水平得到了较大提高,对常见的算法问题也有了一定的理解。参加论坛的比赛慢慢也获得一些名次,有了出题的资格。

 

菜鸟在成长续集

终于测试完了最后一个程序,我轻轻地关闭dev-c++编译器,伸了一个懒腰,然后起身到桌子那头拿起昨天喝剩的的农夫果汁,满意地猛灌一口----好爽!
       
再一次检查了记事本上的测评记录,没错,是eastcowboy的程序速度最快,这小子采用了快速排序法,处理100组数据简直不费时间------其他人的就要逊色多了。
       
还是早点把结果传上去吧,想象自己以前等待结果的心情,那个猴急劲啊!可不能让大伙儿等的太久了。
      
“。。。。。现在我宣布:eastcowboy为本次比赛冠军!”手指在键盘上飞舞,此时的心情好激动啊-----当然更多的是自豪。(呵呵,有点自恋啊------增添点文学色彩,:))
       
等了多久才能站在这个位置?我记不清楚了。编程比赛已经成功举行了24次了,算每周一次,那就是过了168天了。在过去的168天里,我几乎天天与c/c++为伴(说的过了点,但也差不多了),从仰看高手们的高妙身手,到今天能在这论坛里占有一席之地------又来了,纯粹是为了增添点文学色彩,大家不要往心里去啊,其实我的水平还低的很,要想和论坛里的高手们站在一起,还需要买一架高梯子啊!
       
能够成为第23次比赛的冠军,除了幸运还是幸运!什么阴差阳错,鬼使神差,天上掉馅饼,用在这里全不为过。想想看,1217次点击,10个回帖,却只有我一个人交的是程序,而且恰好对了-------虽然算法不咋地-------这真有点像买彩票中了奖的感觉(其实我买彩票中的最大的奖是去年11月中的5元,而且打那以后再也没有中过)。
       
编程比赛开展了快半年了,这半年中人们来来往往,由于各种各样的原因,很多人在论坛里如匆匆过客,一些高手曾经在某些比赛中为大家展现过高妙的算法,但后来就不见影踪了--------真的很希望再看到你们的身影;但是我自从第4次比赛投了稿以后就几乎期期不漏了-------由于时间和水平原因,-也有几次比赛未能交卷,但肯定关注。曾经有几次登上前几位,但多数场合是默默无闻的。较为得意的是第18次比赛解答关于俄罗斯方块游戏外挂的程序,我的算法还不错,但是由于自己的粗心大意,导致功败垂成,实为遗憾!
       
快乐总是短暂的,很快地出题的烦恼就代替了获奖的欣喜。第19次比赛我应johnywoo的邀请参与了出题和测评的工作,当时没有经验,出了一道超简单的题目,结果交卷的人多达60余人,加之我测评手段落后,整整花了我一个晚上才搞定,记得当离开电脑桌时已经四肢麻木,手指痉挛-------记忆太惨痛,至今心有余悸!(当然,我在这里并没有怪johnywoo的意思,相反我很感谢他给了我一次参与的机会)
       
对于我这种没有什么创造性思维,知识面又狭窄的人来说,出一道难度适当,知识性与趣味性兼备的题目,实在是强人所难,于是我向广大网友发出了求救信号,希望大家能够帮我一把,提供一个合适的题目。很快有人响应,在这里我要再一次表示感谢,他们是:johnywooSeZhangkaikai。谢谢你们!
        johnywoo
给我发来一道论坛上网友贴出来,但没人回帖的问题,他认为很有趣,叫我参考看看,可惜我被那一片片的英文吓倒了---------英文不好,连6级都没过,惭愧啊!
        SeZhang
也提供了很好的想法,他建议我可以出一些关于数学公式转换方面的题目,可惜在这方面我们两个都没有成熟的想法,所以也只好作罢。
       
给我帮助最大的是kaikai,他提供了一个很好的想法:让各个选手编写一个程序与其他程序进行猜拳比赛,并且附上了详细的评分方法-------我后来提出的评分方法就是照搬他的。但是我觉察到他的方案有一些漏洞:因为猜拳比赛的出拳是毫无规律可言的,选手程序只要随机猜一个数就好了,算法没有难度。所以我最终没有采用他的方案,而是在他的方案的启发下设计了一个稍微难一点的游戏------“井字棋”游戏。这个游戏要用到回溯和剪枝的算法,相对较难,比较适合作为第2题出现。
        
为了准备比赛的题目我费了不少工夫,除了向网友寻求帮助外,更多的是自己去查找资料。第1题我很快确定下来了,因为我有一本《C语言趣味程序百例精解》,里面有不少简单的趣味性较强的题目-------有需要的同志可以发邮件向我索要,好东西要共享嘛!
        
但第2题我始终不能确定,因为既不能简单,又要有人能够作答,而且要保证趣味性,如果单纯地拿一道数学题出来就太无趣了。我曾经想到过用论坛上一个网友发的求救帖子程序,这个程序很有意思,大意如下:
http://www.programfan.com/club/showbbs.asp?id=152747&page=2
* **** **** * *  **** **** **** **** **** ****
*    *    * * *  *   *       * *  * *  * *  *
* **** **** * *  **** ****    * **** **** *  *
* *       * ****    * * *    * *  *    * *  *
* **** ****   *  **** ****    * **** **** ****

输入一个数,输出对应的图形。(注意图形的中间有一行空。)
如:
Input:139
Output:
* **** ****           *********                    
*    * * *           *   **  *
* **** ****           *********
*    *   *           *   *   *
* **** ****  
       *********   ×       
        
我第一次看到的时候还没有人做出正确答案,正准备采用它的时候,“该死的” GCC 牛人把代码贴上去了 ------- 坏了我的好事,呵呵!
       
我只好另想办法,其间我参考了 2003 年《程序员》合订版,里面倒是有不少好题目,可是难度对我来说都大了点 ------ 什么图论啊,动态规划啊,我看了就头疼 ------ 说白了还是自身能力太差啊!
       
后来又去翻以前买的数据结构与算法方面的书 ------- 有些书买了好久了,都还没有去看,看来我学习的效率太低了,进度太慢。翻到一本《数据结构与问题求解( c++ 版)》( MarkAllen Weiss 著,张丽萍 译) -------- 这本书晦涩难懂,我每次读 10 页左右就想打瞌睡 ------ 里面恰好有一道用回溯法求解博弈问题的例题,我联想到 kaikai 给我的资料,心想这不正是一道可以让程序和程序之间比赛的题目吗,于是最终把第 2 题确定下来。
        
题目是确定了,但事情还没有完,因为我还要自己编写测试程序。书上的例题只是告诉我们如何用回溯法去找到最佳的落子点 ------- 这也就是我让各位选手做的工作 ------ 并没有提供其他更多的资料。没办法,只好自己编。以前都是做别人出好的题目,思路清晰,目的明确,可现在是自己确定规则,还真不太容易。首先要把书上的例题搞懂 ------- 说实话,因为本人脑子太笨,看了两遍硬是没搞清楚程序的意思,直到第 3 4 遍才理清楚思路,然后自己重新编了一个 ------- 书上用的是类,为了测试方便,我把类去掉了。
        
好不容易测试程序可以运行了,我让自己和电脑下了一局,看看程序能不能按照拟定的思路运行,还好,程序基本上能够正确地找到最佳着点。准备工作至此告一段落,我悬着的心终于落了下来 ------- 实际上我还是犯了一个错误,这个错误直到我把试题贴到论坛上的时候才由 szh diycai esatcowboy 等人发现。幸好错误不是很严重,而且发现的早,不然我真的是无颜见江东父老了。看来我们一定要多多交流,闭门造车危害真的很大啊!
        
比赛终于结束了,结果也出来了,把接力棒交给 eastcowboy 以后我的心才算真正平静下来。当然这不是结束,而是新的开始,作为一个正在成长的菜鸟,我将踏上新的征程。
       
菜鸟在成长,不仅仅是说我自己,其实很多朋友都和我一样,在不断地努力,不断挑战自我,获得进步。我是一个比较容易满足的人,虽然只是获得了微不足道的一丁点进步,但还是很高兴,把自己的感想发表出来,和大家一起分享喜悦,希望能够给大家带来一丁点快乐,为这个论坛增加一点生气――显然论坛已经充满生机了,我只不过再加了一把火罢了。
       
最后祝朋友们工作顺利,学习进步!月月加薪,天天开心!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值