课堂笔记
实例:解数学题
- 单循环
while循环
本质是穷举法
实例:双重循环解数学题
XY693 = YX396
如果用单循环解。。。。
step1:写一个新的循环结构
step2:把机械重复的部分保留一份,放入循环体
step3:规则变化的用循环变量表示
扩展:多重循环
多重循环中,break只能跳出当前循环
程序调试
“好的程序是调出来的!”
单步调试
设置断点
一个程序中可以设置多个断点
代码风格基本要求
作业1:水仙花数
求解“水仙花数”是一道非常经典的循环练习题。如果一个三位数( 100 —— 999 )等于它每一位数字的立方和,则称这个数为“水仙花数”。比如 153 = 1^3 + 5^3 + 3^3,所以 153 就是一个水仙花数。
本题的正确输出结果应当包括四个数字: 153 370 371 407
以我们目前(《基础篇》第十回)已经讲解过的知识,同学们至少可以通过两种方式编写出解题程序。这里建议大家使用三重循环穷举法回答本作业,思路及答案可以见本页标签。
除了嵌套循环外,大家也完全可以只使用一层循环即找出所有水仙花数。强烈建议大家在完成嵌套循环解法后,再尝试思考这种解法。我们会在本章发布一周之后,在本页 “解题思路” 中增加这一解法的提示。
思路提示
本例与视频课程中的 “穷举法解数学题” 基本相同,只不过循环次数增加到3次,运算条件也有变化。关键点如下:
所有三位数都可以用 a100 + b10 + c 表示,而它们每一位的立方和都是 a3 + b3 + c**3 。
所以只要做一个三层循环,最外围将a从1循环到9,第二层将b从0循环到9,第三层将c从0循环到9,就可以穷举出所有三位数。
在第三层循环里面,把穷举到的三位数abc按照(1)中的表示方法进行比较,即可判断出它是否为水仙花数。如果是,将abc打印出来即可。
特别提示:要格外注意a、b和c的初始化位置。比如,如果把b=0写在所有循环之前,程序就无法找到全部答案。具体原因与视频课程中调试器示例相同。