贝壳C++后台——两个数,一个数到另一个数的最少步骤
Posted huangfuyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贝壳C++后台——两个数,一个数到另一个数的最少步骤相关的知识,希望对你有一定的参考价值。
【题目】假设有这样一个计算器,只有两个按钮,一个按钮使显示的数字减少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++后台——两个数,一个数到另一个数的最少步骤的主要内容,如果未能解决你的问题,请参考以下文章