这是一道看上去简单,但思考一下会发现没什么思路,解决以后觉得很简单的一道题。代码很简单,使得我有些怀疑它中等的难度。但不得不承认这其实是一道数学题。
这题的难点在于,当得到的数是奇数时,是加一还是减一。
这道题要求的是得到最少的步骤数,所以加一还是减一就必须使得接下来的步骤减少。对于奇数,加一或减一都能使其变成偶数,但是,如果能使加一或减一后再除以2得到的数仍然是偶数,则又可以减少一个步骤。所以我们对得到的奇数对4求余,若余1则减一,余3则加一。
而这里还有一个特殊情况,那就是3,按照上面的方法,3应该是加一的,但其实由于3和2的邻近性,所以3应该是减一才能得到更少的步骤数。
以下是代码截图: