贝壳C++后台——两个数,一个数到另一个数的最少步骤

2021-07-08 23:06

阅读:386

标签:之间   大于等于   问题   奇数   分析   等于   ++   简单   次数   

【题目】假设有这样一个计算器,只有两个按钮,一个按钮使显示的数字减少1,另一个按钮使显示的数字乘以2。当显示的数值为N,那么至少要按多少次按钮才能使显示的数值变成M?

输入:两个整数N和M,1

输出:使显示数值变成M的最少按钮次数。

样例:4 5

输出:3

 

 

【分析】这个问题很有趣,正向思维这个4怎么变成5,不如逆向思维5需要怎样的步骤而来,因为计算器就两个功能。

1、在N

2、这个比5大的数,只能是一个比5小的数乘来的;(需要是个偶数)

3、这个比5小的数有可能介于N和M之间,若是小于N,那就简单了。需要的步骤是N减去这个数;

4、介于之间的时候,需要递归的再递归1、2步,直到小于N。

代码:

 1 #include  2 
 3 int main(){
 4     
 5     int N, M=0;
 6     int temp=0;
 7     cin>>N>>M;
 8     if (N>=M)
 9     {
10         cout M;
11         return 0;
12     }
13     do{
14         if (M % 2 == 1)
15         {
16             M = (M + 1) / 2;
17            //需要两步,乘以2,再加1
18             temp += 2;
19         }
20         else
21         {
22             M /= 2;
23             temp += 1;
24         }
25       } while (M > N);
26     coutM);
27 
28     return 0;
29 }

小学数学奥赛题!

 

贝壳C++后台——两个数,一个数到另一个数的最少步骤

标签:之间   大于等于   问题   奇数   分析   等于   ++   简单   次数   

原文地址:https://www.cnblogs.com/huangfuyuan/p/9581591.html


评论


亲,登录后才可以留言!