通过在 C++ 中执行给定的操作将数字减少到 1
给定一个整数Number作为输入。目标是找到将输入Number减少到1所需的最少步骤或操作数。可以执行的操作将是-:
如果Number是偶数,则将其除以2。
如果Number为奇数,则将其增加或减少1。
例子
输入 -数字=28
输出 -将28减少到1的最小步骤:6
说明-
28是偶数-除以2=14
14是偶数-除以2=7
7是奇数-增加1=8
8是偶数-除以2=4
4是偶数-除以2=2
2是偶数-除以2=1
输入 -数字=9
输出 -将9减少到1的最小步骤:4
说明-
9是奇数-减1=8
8是偶数-除以2=4
4是偶数-除以2=2
2是偶数-除以2=1
下面程序中使用的方法如下
在这种方法中,使用递归方法来检查将Number减少到1所需的最小操作。如果它甚至简单地除以2,则递归检查Number+1或Number-1的最小方法,以较小者为准。
将输入Number作为整数。
函数minWays(intnum)将num作为输入并返回将num减少到1所需的最少操作数。
将变量tmp1、tmp2和min作为整数。
如果num为0,则返回1。
如果num%2==0那么它是偶数然后设置num=num/2
如果num为奇数,则设置tmp1=minWays(num-1)和tmp2=minWays(num+1)。
设置min是tmp1和tmp2的最小值。
返回1+分钟。
最后我们会得到想要的结果。
在main中打印结果。
示例
#include <iostream> using namespace std; int minWays(int num){ int tmp1,tmp2,min; if (num == 1){ return 0; } else if (num % 2 == 0){ tmp1=minWays(num/2); return (1 + tmp1); } else{ int tmp1=minWays(num - 1); int tmp2=minWays(num + 1); int min=tmp1<tmp2?tmp1:tmp2; return (1 + min); } } int main(){ int Number = 21; cout <<"减少的最小步骤 "<<Number<<" to 1: "<<minWays(Number); return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出
减少的最小步骤 21 to 1: 6