2.5 简单算法举例

【例2-6】有4个小球,编号为1、2、3、4,一起放入黑箱子中,每次不放回地取出一个,则取球的顺序有哪些情况?如代码清单2-7所示。

代码清单2-7 模拟取球结果

运行结果:

这种算法比较好理解,先设定4个互不相关的变量i、j、m和n,每个变量的取值都是1、2、3、4,依次取4个变量的值,如果各不相同,则满足题目条件,依次输出这4个变量的值,即为取球的一个顺序。但是这个算法不是最好的,有兴趣的话可以尝试设计其他的算法。

【例2-7】找到所有符合要求的三位数:个位、十位和百位数字的立方和等于该数本身。如代码清单2-8所示。

代码清单2-8 计算特殊数字

运行结果:

先建立一个所有三位数的循环,依次求出百位、十位和个位数字,进行判断,如果百位、十位和个位的立方和等于原数字,则输出,循环结束后就能得到所有这样的三位数。

【例2-8】有一个序列:2/1,3/7,10/8,18/15,33/23……先找到规律,再求出这个序列的前10项的和。如代码清单2-9所示:

代码清单2-9 计算序列和

运行结果:

设计算法的关键是找到分子、分母的变化规律,分母比前一个分数的分子多5,分子是前一个分数分子与分母的和。找到规律之后,再进行迭代、相加,就简单多了。

【例2-9】求出1!+2!+……+10!的值并打印出来。如代码清单2-10所示:代码清单2-10 计算10的阶乘和

运行结果:

这个问题的一种比较简单的处理方式利用了1的阶乘就是1本身的性质,后面每个数的阶乘就是前一个数的阶乘再乘以自身,这种算法相对简单,写出来的程序也很简洁。

【例2-10】输入一天的日期(年、月、日),判断这一天是一年中的第几天。如代码清单2-11所示。

代码清单2-11 判断日期

运行结果:

以7月4日为例,先将前6个月的天数加起来,再加上7月的4天即可,注意考虑特殊情况,闰年2月有29天,当输入闰年且月份大于2时要多加一天。