9/3 笔试题

题目:输入两个数 , n,m。  n只能做-1 或者*2操作 , n最少需要多少步能到m

反向思考 m  +1  或者 /2操作

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 bool isEven(int des){
 6     return des%2==0;
 7 }
 8 /**
 9      * 源进行 *2 或 -1 操作 找到目标(反向目标进行 /2 或 +1 操作 找到源)
10      * 
11      * @param src
12      *            源数字
13      * @param des
14      *            目标数字
15      */
16 void find_count(int src,int des){
17     int count=0;
18     while(src!=des){
19         if(src<des){
20             if(isEven(des)){
21                 des/=2;
22                 ++count;        
23             }
24             else{
25                 ++des;
26                 ++count;    
27             } 
28         }//end if
29         else{
30             while(src>des){
31             count++;
32             des++;
33             }
34         }
35 }//end while
36             
37     cout<<"总共用了 "<<count<<" 步\n" ;
38 }//end func
39 int main() {
40     int n,m;
41     cin>>n>>m;
42     find_count(n,m);
43 }

 

posted @ 2018-09-06 14:00  快第三个十年  阅读(194)  评论(0编辑  收藏  举报