C竞赛,我又废了、、、

来源:互联网 发布:kingkos cms 编辑:程序博客网 时间:2024/05/17 08:11

           今天早上,参加了学校的C技能竞赛,1个小时内,4道题目。

           说起来,都是很基础的问题。就是用简单的C语言基础解决比较简单的算法问题。

           我一共做了2道题,瞄了一个道题,一道题没看。 做对了1道题。

 

           第一道题,就是给出一个两位以上的整数,然后判断这个数是不是一个降序数(即该数各位上的数字是否从大到小的顺序排列),并求出各位数字之和。

           一般我们当然就是想到了用求余的方法剥离出该数的各位数字,而我知道有一种方法可能更直观:那就是将该数转换为一个字符数组,每一个字符就是该数上的各位数字。

          我先使用sprintf函数,将一个多位数数转换为字符数组,然后用atoi再将各位char型的数字转为int型。这其中关键的问题就出现了。

         就是如何给atoi传参,atoi函数原型为:int atoi(const char*) 我们看到其参数是一个指向常量字符的指针,而我当时怎么传的呢, 我直接就传进了值,而不是传进该值的指针。 竞赛完后,我才想起为什么编译器报出错误:cannot convert “char”

 to “const char*”。当时确实过了好长时间,这道题还没做出来(我崩溃了),我就干脆先放弃这道题目,做下道题目吧。

 

 

          第二道题也许是最简单的了吧。写代码加上调试,很快就做完了,但也不是那么的顺利。

          第二道题是让你输入正整数n(n>2)和 n个整数, 然后判断n个整数中,相邻整数差的最大值。

         比如: 输入5和 3   6  0  2  8 。

        第一步当然先求出相邻两个整数之间的差了。得出n-1个差(可能为正数,也可能为负数,但最后比的是绝对值,我最初没想到fabs函数,而是采取了if判断:即如果相邻两个数之间的差小于0,那么我用0减去这个差即可,哎,我紧张地想不起轮子,悲剧!) 。

       

         下面当然是找这(n-1)个差的最大值了。你猜我首先想到的是什么啊, 当然先把这(n-1)个数排序了,然后直接输出最大值就可以了。  我又傻了,你知道我排序用什么算法吗。冒泡啊。我没敢想快排啊,插入啊。所以我就把冒泡写出来了。我傻啊。题目又没有让我按顺序输出这(n-1)个差,我干吗要费力,抗着一个屠龙刀宰一只蚂蚁呢。所以我又恍然了,大悟了,删了,直接定义一个整型(int)的max

对(n-1)个差注意判断,只要后面的差值有比max大的,我就把后面的值付给max,最后直接输出max就可以了。这多直接。这个终于有结果了。过关了啊。

 

         已经没时间了,后面有件事还要签到啊。 看了看第三道,没做直接就交卷走人了,我也不想啊。

         第三道题就是一个带符号的二进制数到十进制数转换的问题。 只要学习计算机,特别是只要与逻辑,与硬件稍微相关,精确到0和1的课程,都要先学学进制的知识,当然也包括进制间怎么转换的问题了,相信大家都有同感。

        

          比如: +01001101 转换成十进制,我不算了,“就+什么什么吧”。

          再比如: -11010101010转换成十进制, 结果就是“负的设么什么吧”。

 

            总之结果一定有符号,正号当然可以省略了。

 

        我走了,离开了,我不知道第四道题是什么,我没瞄它啊。

        我发现:我越来越不会思考了,思维越来越不活跃了,在算法或与数学相关的问题上,我紧张了,崩溃了。

       我也发现,我对数字越来越不敏感了, 我必须加强培养啊,因为我了解,只是我的心太急躁了。可能被冲昏了头脑。

       我也发现,我只懂得去学习语法了,却不知道所学解决所遇到的问题。

                                 不是我没学过C,不是我不会C,而是我不会用C,最好的答案可能就是手还不够勤快啊。

   

 

       这也让我想起了曾经参加过学校的ACM的选拔赛,3个小时做7道题,可是我一道题也没做出来啊,我卡在那些题上了。

我不会解决问题啊。懂那么多语法,语言有什么用啊,两个字:还真没用。只有你用了,实践了,才懂得,“哦,原来如此,我懂了”。

相信大家也懂的。

       

        ACM里的一道题(是关于页码计算的),就是我博文里的一篇文章里的,这是我在参加那个后,1年后才把它给弄出来的,因为我一直挂念着那个题。我当时也让朋友把那个题做了下,然后他就是除啊,求余啊,我一看见这,我就晕了,一大片,造成条理 后混乱,越盯着那段程序看,头脑越烫,最后就在逻辑里把自己个陷进去了,头大啊。

            当我阅读另一个朋友的一本书(《ACM程序设计》,主要以C++的STL库为基础和工具)时,我发现其上面使用了C++的流方法,实现字符串和数值之间的转换,我也发现了sprintf这个函数,于是我就在我前面的一篇博文里做出了那个题(关于页码计算的),感觉思路也变得更清晰了。

 

            而今天我也想同样使用sprintf函数做出本篇文章最前面提到的降序数问题,可是又出现了atoi,我又失败了。

            其实,我当时想啊,我也不用将字符型的值转换为数值型的啊,我为什么不直接比较字符串呢,0到9的ASCII码值为48到57,是有顺序的啊。我大脑好像有风暴袭来,逃了出去,该题就此作罢,该文也就此作罢。

 

           大家帮忙指导指导。

          

            思维有待训练,有待交流。

           算法有待学习,用一辈子去学习。

原创粉丝点击