码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-09-03 22:58:01      阅读:394      评论:0      收藏:0      [点我收藏+]

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

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

输入:两个整数N和M,1<=N,M<=10^9.

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

样例:4 5

输出:3

 

 

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

1、在N<M情况下,5只可能是一个大于等于5的数减来的;(奇数+1,偶数不加)

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

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

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

代码:

 1 #include <iostream>
 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<<N - 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     cout<<temp+(N-M);
27 
28     return 0;
29 }

小学数学奥赛题!

 

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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!