算法笔记《第三章》

第三章没有啥具体的知识点,主要是讲一些简单的算法,顺便巩固一下之前学的语法。

以下我就罗列一下我学习过程中遇到的问题吧。

一个是for语句中的循环变量问题

循环是各种算法里面经常接触到的语法,而循环的精髓就在于循环变量的操作,常见的for循环是这样的

1
2
3
for(int i=0;i<n;i++){
...
}

这种形式的循环会执行n次,而第x次循环中i的值为x-1,这种类型大多用于对数组的操作,因为第x个数组对应的坐标就是x-1

还有一种是这样的

1
2
3
for(int i=1;i<=n;i++){
...
}

这种循环也会执行n次,区别是第x次循环中i的值就是x,这种类型适用于编号。

上述两类都是在循环内定义变量并赋初值的,也可以在循环外定义变量和赋值,这样这个变量经过循环后会发生相应改变,在某些算法里面也许会有用,不过我感觉如果真的需要这个数据可以重新再定义一个,把循环变量和其他变量区别开不容易搞混。

数组的下标问题

一个算法会给一个输入的上限,根据这个上限去选择合适的数组大小,一般都会比这个大一些,一个是因为末尾有空字符串,另一个我记得在数据结构与算法里面学到过对于目前的计算机来说空间是比较足够的,所以在取舍空间和时间时优先时间。

字符数组的长度

之前就记得末尾会有空字符串了,但忘了strlen函数是会自动忽略最后那个空字符串的

长串数据输入

可以使用语句

1
while (scanf("%d",&n)!=EOF){}