关闭

初试编程+算法

标签: C++
184人阅读 评论(0) 收藏 举报

    在大一时老师就告诉我们“程序就是数据结构+算法”,当时对于只是刚学习C++的我们来说很难理解,以及面向对象的概念等,当时被这些专业词搞得一头雾水,不过随着大二学习了数据结构后我们慢慢对“程序就是数据结构+算法”这句话有了初步的理解。

随后我们专业的同学又了解到“蓝桥杯”程序设计比赛,初试蓝桥杯的题时真是备受打击,本以为自己学的不错,在见识到蓝桥杯以及一些在线测试系统的题目时真是意识到自己差的好远好远,后来我边学习数据结构边自学一些算法,然后通过做题来检验自己的水平,在学习的过程中深深体会到什么是“学无止境”,尤其对计算机/软件专业的学生来说更是这样。

    在201511月份迎来了我们学校针对于第七届蓝桥杯比赛的校内选拔赛,我当然是积极的参加了,以此来考核一下自己这段时间的学习。选拔赛共5道编程题,分为C++组合Java组。第一题,具体题目忘记的,不过一看就知道是使用暴力循环来解决,可是这题老师处得很有技巧,循环间距不再是平常所见到的i++而是 i+=0.01 ,这样一个步长的变化就是很多同学懵了圈,其实当时我也是思路混乱,总觉得自己的答案不正确,或者有啥算知识来解决只是我没想到。

   然后很心虚的看下一题,不得不说第二题真是给了我很深的印象,题目是:一个数为99999……(未知位数),这个数能被61整除,请编程将这个数的位数求出。在当时,我觉得应该是使用暴力for循环,可以一写不对劲了,循环的上限找不到,而且,随着位数的增加,基本数据类型是存不下的,然后赶紧转化思路,难道是大数问题?可自己有对大数问题一无所知,所以当时心想这下完了,前两题就挂这了,这次肯定完了丑大了,自己这段时间的努力几乎没啥效果。这时脑海里想的都是前一段时间刷的题目,过了会突然想到自己做过的一道题,是除法和求余相结合的过程,转来一想这题难道也需要用求余的方法,抱着死马当活马医的心理试了一下,天!就是这样,利用除法的特性,先令一个数n=9,检验n%61否为0,不为0n=(n%61)*10+9,进行下一次检验,一直这样循环,直到n%610为止。具体代码:

#include<iostream>

using namespace std;

int main(){

       intn=9;

       intm=61;

       intcount=1;  

       while(n%m!=0){

             

              n=n%m*10+9;

              count++;

       }     

       cout<<count<<endl;

       return0;

}

就这么几行简单的代码,如果思路错了,不知道要写多少代码和多少循环……

从这题我深刻体会到写程序思路和逻辑是多么的重要,以及一些算法的特性,在解决一些问题时往往能起到关键作用。 做出此题后赶紧进入到下一题,很顺利解决了第3题,第4题是使用递归的写法,可惜功夫没达到,第5题根本没看,时间就结束了。

选拔赛结果是我通过了,成功选拔到省赛中,这次考核不算完美但却让我有了一些学习的方向,随后我又陆续了解到其他一些算法如:贪心、分治、动态规划等等,然后结合所学的数据结我制定了自己的算法+数据结构的实战练习计划……

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8272次
    • 积分:245
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论