题目链接:http://acm.xidian.edu.cn/problem.php?id=1312
可以用队列模拟,但D题再说吧,这个只有两种操作,-1和*2;
若n > m,一直做-1;
若n = 0,而m != 0,则不可能达到
若n < m,可以从m出发,尽可能做 / 2,若不行,则做 + 1;(这个贪心多想想吧)
1 #include<stdio.h> 2 3 int main() 4 { 5 int n, m; 6 while(scanf("%d %d",&n,&m) != EOF) 7 { 8 int cnt = 0; 9 if(n == 0 && m != 0) 10 { 11 printf("-1\n"); 12 continue; 13 } 14 if(n == m) 15 { 16 printf("0\n"); 17 continue; 18 } 19 while(1) //处理到m < n时,则剩下的步骤为n--; 20 { 21 cnt++; 22 if(m > n && (m % 2 == 0)) 23 m /= 2; 24 else if(m > n && (m % 2 != 0)) 25 m++; 26 else 27 break; 28 } 29 cnt += (n - m) - 1; 30 printf("%d\n",cnt); 31 } 32 return 0; 33 }