【愿成其身】[13]循环结构 – 计算机的神奇

本篇文章讲解题目:蜗牛爬树

推荐先独立进行解题尝试,然后再阅读本篇讲解!


一道小学数学题,但对于计算机来说,却是直接模拟这一过程更为简洁。

很明显的一个思路是,对高度不断模拟上升下落的这一过程,然后统计次数,直到高度达到树的高度。

简单的画一个流程图:


分析可以发现,这里的循环是由一个条件控制的。如果满足某一条件则一直循环,否则退出循环。

在C语言里,这种形式可以使用while语句表达,其基本形式为:

可以发现与if语句形式类似,也是很好理解,若满足条件,则不断执行语句,每次执行之后判断条件是否成立,然后选择继续执行或者跳出循环。


有了上面的基础知识,我们再来思考这道题,发现上面的程序流程图对于一些情况是没有考虑到的。

  • 首先是Impossible不可能的情况,下降比上升的幅度还大,那么很显然是不可能的。但是有一种却要排除在外,也就是第一天白天就能够爬到树顶的情况,那么应该输出1。
  • 考虑到如果白天就爬到,那么晚上就不用掉落,很显然我们在白天爬完之后应该判断,是否已经到了树顶,如果到了,那么就不需要晚上掉落这一部分了。

加上这些考虑,我们改进流程图如下:


有了这些思考,AC还是件难事吗-.-。

嗯……似乎还有些问题。

首先是对于输出不可能判定的条件有两个,在C语言里我们使用两个&号,也就是“&&”来表示并且,而用“||”来表示或者。这个条件就可以写为n<h&&n≤m。

再来是循环内的判断,如何终止循环呢?我们可以使用continue与break来控制循环。

continue的作用是跳过continue下面的部分直接回到循环条件那里判断是否需要进行下一次循环。

break的作用就是直接跳出循环。

测试代码:

这里还顺带写了while的一种常见用法while(T--),可先自己理解理解其中含义,在后面输入输出系列中会详细说明。

写到这里,这一题就算告一段落了。

事实上,while还有一种变形,do-while,其基本形式为:

也就是判断循环条件是否成立之前,先执行一次循环体,这在解决一些问题的时候很方便。

也许你可以自己尝试画出它的流程图呀~

  • 用支付宝打我
  • 用微信打我

发表评论

电子邮件地址不会被公开。 必填项已用*标注