C++でNを0に減らすために必要な特定のタイプの操作をカウントします
正の整数Nが与えられます。目標は、Nを0に減らすために必要な演算の数を見つけることです。適用される演算はN =N-Pです。ここで、PはPの最小の素数除数です。
例を挙げて理解しましょう
入力 − n =17
出力 − Nを0に減らすために必要な特定のタイプの操作の数は、− 1
説明 −17の最小の素数除数は17自体です。したがって、操作は17-17=0に1回だけ適用されます。
入力 − n =20
出力 − Nを0に減らすために必要な特定のタイプの操作の数は、− 10
説明 − 20の最小の素数の約数は2です。2を何度も減算し、次の素数の約数を見つけます:
20%2==0, 20-2=18 18%2==0, 18-2=16 …………………..14, 12, 10, 8, 6, 4, 2, 0 Total 10 times the operation is applied.
以下のプログラムで使用されているアプローチは次のとおりです
すべての偶数Nの場合、最小の素数除数は常に2になり、偶数Nから2を引くと、再び偶数になります。すべての奇数について、最小の素数除数は奇数になり、奇数から奇数を引いた後、数は偶数になるので、再び2が最小の素数になります。最小の素数除数を見つけるには、i =0からiまで、i * i
入力として整数Nを取ります。
関数N_to_Zero(int N)はNを取り、Nを0に減らすために必要な操作の数を返します。
countの初期値を0とします。
i=2から開始します。 (i * i)
(i * i)がNを超える場合は、i=Nに設定します。
操作回数は1+(N-i)/2となります。
カウントを1+(N-i)/2として設定します。
結果としてカウントを返します。
上記のコードを実行すると、次の出力が生成されます-
例
#include<bits/stdc++.h>
using namespace std;
int N_to_Zero(int N){
int count = 0;
int i = 2;
while((i * i) < N && (N % i)){
i++;
}
if((i * i) > N){
i = N;
}
count = 1 + (N-i)/2;
return count;
}
int main(){
int N = 10;
cout<<"Count of operations of the given type required to reduce N to 0 are: "<<N_to_Zero(N);
return 0;
}
出力
Count of operations of the given type required to reduce N to 0 are: 5
-
C++で重みが2の累乗である特定のツリー内のノードをカウントします
ノードの重みを持つ二分木が与えられます。目標は、数が2の累乗になるような重みを持つノードの数を見つけることです。重みが32の場合は25なので、このノードがカウントされます。 例 入力 値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes in the given tree whose weight is a power of two are: 3 説明 we are given with the tree node and the weights associated with each node. Now we calculate the po
-
C++のグリッドで指定された方向に可能な移動をカウントします
サイズnxmのグリッドと開始点x、yを表す2つの変数nとmです。 また、移動((1,1)、(2,2))などとしてグリッド内を移動するために実行できるステップ/移動のペアも指定されます。移動の各ペアは、x、y軸で実行されるステップの単位を表します。目標は、境界[1、n] X [1、m]内のグリッド内をトラバースするために実行できる合計ステップを見つけることです。nが5、mが4、現在の位置が2、2で、選択されたステップが( 1、-1)次に、このステップを1回実行すると、(3,1)になります。このステップを再度実行すると、(4、-1)になります。これは、-1が範囲外であるため無効です。 例