题目:输入两个数 , 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<<" 步 " ; 38 }//end func 39 int main() { 40 int n,m; 41 cin>>n>>m; 42 find_count(n,m); 43 }