第2章 循环结构程序设计
2.1 for循环
1.建议尽量缩短变量的定义范围。例如,在for循环的初始化部分定义循环变量。
例题2-1 aabb
输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。
- 浮点数计算存在误差,四舍五入的做法floor(x+0.5)
- 思路反转,枚举平方根,再判断是否符合aabb
2.2 while循环和do-while循环
例题2-2 3n+1问题
猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如,3->10->5->16->8->4->2->1。
输入n,输出变换的次数。n<=109。
样例输入:
3
样例输出:
7
- 当需要统计某种事物的个数时,可以用一个变量来充当计数器。
- 在观察无法找出错误时,可以用“输出中间结果”的方法查错。
- int,32位,范围是-2147483648~2147483647。
- 通过输出中间变量法,得出乘法溢出,长整型可定义为long long n=n2;
例题2-3 近似计算
- if(term<1e-6) break;
2.3 循环的代价
例题2-4 阶乘之和
乘法溢出
速度太慢,可使用计时函数clock()测量,解决办法是采取每步取模
2.4 算法竞赛中的输入输出框架
例题2-5 数据统计
- scanf函数返回值,是成功输入的变量个数
- 输入结束,先按Enter键,再按Ctrl+Z键,最后再按Enter键,即可结束输入。
- 变量在使用之前赋值,max=min=x
例题2-6 数据统计II
2.5 注解与习题
习题2-1 水仙花数(daffodil)
习题2-2 韩信点兵(hanxin)
习题2-3 倒三角形(triangle)
习题2-4 子序列的和(subsequence)
习题2-5 分数化小数(decimal)
习题2-6 排列(permutation)
- 题目1
- 题目2