给定一个运算规则,让其在最短的步骤之内达到1

给定一个数字n,如果n是偶数就让n/2,如果是奇数就让n +1或-1,例
n = 31;
n = n - 1; //30
n = n / 2; //15
n = n + 1; //16
n = n / 2; //8
n = n / 2; //4
n = n / 2; //2
n = n / 2; //1
问:怎样能够以最少的计算次数,算出n = 1;

 

csdn一网友给的算法:

 

 

 1 public class Test1 {
 2 
 3     public static void main(String[] args) {
 4         int n = 31;
 5         
 6         if(n < 1) {
 7             return;
 8         }
 9         int count = 0;        
10         while(n != 1) {            
11             if(n % 2 == 0) {
12                 n /= 2;                
13             } else {
14                 if((n & 2== 0 || n == 3) {
15                     n--;
16                 } else {
17                     n++;
18                 }
19             }
20             count++;
21             System.out.println(count + "" + n);
22         }
23         System.out.println("Total: " + count);
24     }
25 }
26 

posted on 2008-10-11 22:02  胖兔子  阅读(149)  评论(0)    收藏  举报

导航