算法竞赛入门经典阅读心得

  1. List item
    . List item
  • List item

算法竞赛入门经典阅读心得

** 看完算法竞赛入门经典这本书的前三章,我感觉自己还有很多的基础知识没有掌握。也许,对于写代码并没有太大的影响,但对于读代码和代码的容错性把握还是有很大的不足之处。
这本书的前三章是C语言的语言篇,全部是从基础开始讲的。原本经过将近一年的学习,我认为我对于这些基础知识对于我来讲根本是小菜一碟,可是看得时候才发现,这本书上所讲的内容大多是我没有见识过得,但又非常实用的东西。原来一个题真的可以有很多不同的算法,感觉特别简单的就将以前的难题统统解决了。以前做题的时候总是依靠复杂的算法来解决一些简单的问题,缺少对代码简洁性的理解,不能用最简单的方法来解决问题;
首先这本书的第一章讲的是算术表达式。顾名思义就是加减乘除运算法则了。
1.还有int和double类型的数转换会遇到的各种情况比如把将‘5’开根号得到的答案是‘2’;因为,整数的运算结果还是整数,‘9’开根号得‘3’,而‘9.0’开根号得的是‘3.0’。这只是其中一个例证而已在运算中这种情况防不胜防。如果不处理的话将会导致出现误差答案错误。
2.另外有一些特殊的符号是不能直接打印出来的比如‘\n’‘\0’‘%d’等都需要加入‘\’转印符才可以在屏幕上显示出来。
3.研究算法是为了解决问题,而不是为了写程序而写程序,应该保持代码的简洁性而不是为了自己床罩条件去展示编程技巧。
第二章讲的是循环结构程序设计,主要讲的是for循环和while循环的不同之处和相同之处。
1.for循环的格式为:
for(初始化;条件;调整;)
循环体;
While循环格式为:
While(条件)
循环体;
在特别的时候for循环和while循环可以相互转化。
2.在程序运行时往往会有需要取近似值的时候但电脑只会去掉小数部分,这个结果让我很多次都感觉到非常的无奈,今天才在这本书上找到解决办法——floor(m+0.5)便可以解决电脑只会取整的问题了,非常简单的方法。
3.溢出问题,在写程序过程中溢出是经常发生的,因为int整型的范围只是从-231到231-1;如果是一个5位数乘以5位数很可能就要溢出了。这个时候便要去想怎样简化数值的大小尽量不溢出了。当然,也可以用long long(-263—263-1)或double(-252—252-1)来解决也是可以的当然这两个也是有范围的要防止溢出还是要动不少脑筋的。
4.浮点数陷阱,
#include<stdio.h>
int main()
{
double i;
for(i=0;i!=10;i+=0.1)
printf("%.1f\n",i);
return 0;
}
这个程序无法结束,也就是不会出现i==10的情况,这个程序可以更好地理解浮点数与整数的差别,不要用主观来判断,请上机实验。
第三章数组与字符串,当需要输入较多的数字却又不能及时用掉时或还需二次使用时我们需要先将输入的数字储存在一起,这时就要用到数组了。当输入的是字符是则是字符串来存放。
1.字符串和数组用的时候都尽量开的大一点防止越界而是程序崩溃,一般的main函数里面不能开到1000000,否则会报错,如果需要的多可以开到main函数外面。
2.一般输入字符串有以下几种方法
gets();
scanf(“%s”,字串名);
fgets();
但使用时应注意gets();没有明确最大字符数,有一个潜在的问题gets();将不停地往字符串里面塞东西不管塞不塞的下,所以gets();存在缓冲区漏洞。虽然可以使用,但从长远来看不推荐使用。
3.字符串函数。5个基本函数:strlen()返回字符串长度;strcpy(字符串1,字符串2)将字符串2中的字符复制到字符串1中,由于字符串本身是数组,它不是‘一等公民’所以只能用strcpy();来赋值,strcat();来连接;用strcmp();来比较;用strrev();来逆序;
除了这些之外本书还涉及了许多的文件操作,本人涉猎不深,便不多做解释。这本书给我最大的印象便是解决了一些非常边角的问题,如果你觉得自己的代码总是莫名的出现一些错误建议多翻翻这本算法竞赛入门经典也许能够解决你的困惑。
谢谢观看!**

猜你喜欢

转载自blog.csdn.net/weixin_44584292/article/details/90321967