一道笔试题
Trilogy公司的笔试题
如果n为偶数,则将它除以2,
如果n为奇数,则将它加1或者减1。
问对于一个给定的n,怎样才能用最少的步骤将它变到1。
例如:
n= 61
n-- 60
n/2 30
n/2 15
n++ 16
n/2 8
n/2 4
n/2 2
n/2 1
我的想法是这样的:
当n为偶数时,没得选择,除以2就好。所以关键是看对奇数时怎么处理。
当n为奇数时,如果为1,就结束了,如果不为1,那肯定可以表示成下面得等式:
n=m*2+1
此时选择对n是加1还是减1呢?
如果上式中的m是偶数的话,那n减1,因为m可以继续除以2。如果m是奇数的话,n加1,再除以2之后得到m+1,m+1是偶数可以继续除以2。当然n为3的时候应该减去1。
我觉得基本上就是“贪心”的思想。