给定一个运算规则,让其在最短的步骤之内达到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
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
浙公网安备 33010602011771号