入力として整数を指定します。目標は、入力数値を 1 に減らすために必要なステップまたは操作の最小数を見つけることです。実行できる操作は次のとおりです。 -:
Number が偶数の場合、それを 2 で割ります。
数値が奇数の場合は、1 ずつ増加または減少します。
入力- Number=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
2 は偶数です - 2 で割る = 1 h2>
このメソッドでは、再帰的メソッドを使用して、Number を 1 に減らすために必要な最小限の操作を確認します。 Number 1 または Number-1 (どちらか小さい方) が単純な 2 による除算であっても再帰的にチェックする最小限の方法。
入力 Number を整数として扱います。
関数 minWays(int num) は、入力として num を受け取り、num を 1 に減らすために必要な最小操作数を返します。
変数 tmp1、tmp2、min を整数として取得します。
num%2==0 が偶数の場合は、num=num/2
num が奇数の場合は、設定しますtmp1= minWays(num-1) および tmp2=minWays(num 1)。
min を tmp1 と tmp2 の最小値に設定します。
#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 <<"Minimum steps to reduce "<<Number<<" to 1: "<<minWays(Number); return 0; }
Minimum steps to reduce 21 to 1: 6
以上がC++ では、指定された操作を実行して数値を 1 に減らします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。