C ++で指定された操作を使用して、配列を単一の要素に縮小します
入力として整数変数Numberを指定します。 1からNumberの範囲の要素をソートされた順序で含む配列を考えてみましょう。各ステップで奇数位置の要素が削除されるように配列に対して操作を実行すると、次に、この操作をN回実行して、要素が1つだけ残るようにします。その要素を最後に印刷します。
注-:要素の配置は、インデックス0の配列が1番目の位置になるようになります。
配列内の要素数のテストケース
入力番号=1、出力=1
入力番号=2、出力=2
入力番号=3、出力=2
入力番号=4、出力=4
入力番号=5、出力=4
入力番号=6、出力=4
入力番号=7、出力=4
......
入力番号=12、出力=8
入力番号=20、出力=16
上記の観察に基づいて、2 i の間の数値の範囲について 〜2 i + 1 -1つの出力は2 i になります 。
例
入力 −number =7
出力 −リダクション操作後の単一要素は:4
説明 −最初の要素は位置1などにあります。
配列は[123 4 5 6 7]
になります最初の操作後:[2 4 6]
2回目の操作後:[4]
入力 −番号=18
出力 −リダクション操作後の単一要素は:4
説明 −最初の要素は位置1などにあります。
配列は[123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18]
になります最初の操作後:[2 4 6 8 10 12 14 16 18]
2回目の操作後:[2 8 12 16]
3回目の操作後:[8 16]
4回目の操作後[16]
以下のプログラムで使用されているアプローチは次のとおりです
このアプローチでは、whileループを使用して、上記の式に基づいて最終結果を計算します。初期値を2とし、2 * result <=入力数までトラバースし、各反復で値を2倍にします。
-
入力変数Numberを取ります
-
関数getsingleElement(long num)は入力番号を受け取り、上記の式に基づいて結果を出力します。
-
可変の結果を取ります。
-
結果を2で初期化します。
-
結果*2<=num。
までwhileループを使用してトラバースします。 -
意志の中の二重の結果。
-
whileループが終了するとすぐに、目的の値が取得されます。
-
結果を返します。
-
結果をメイン内に印刷します。
例
#include<bits/stdc++.h> using namespace std; long getsingleElement(long num){ long result; result=2; while(result*2 <= num){ result=result*2; } return result; } int main(){ int Number = 20; cout<<"The single element after reduction operation is : "<<getsingleElement(Number) ; return 0; }
出力
上記のコードを実行すると、次の出力が生成されます
The single element after reduction operation is : 16
-
C++で指定された違いを持つペアを見つけます
配列Aがあるとすると、n個の異なる要素があります。 xとyの差が与えられた差dと同じになるように、配列Aからペア(x、y)を見つける必要があります。要素のリストがA=[10、15、26、30、40、70]のようで、差が30の場合、ペアは(10、40)と(30、70)になります この問題を解決するために、配列がソートされていると仮定し、左から2つのポインターをポイント要素に取ります。最初は、最初の1つの「i」が最初の要素を指し、2番目の「j」がポイント要素を指します。 2番目の要素。 A [j] – A [i]がnと同じ場合、ペアを出力します。A[j] – A [i]
-
C ++の絶対差の合計が最小の配列要素?
このプログラムは、明確な要素を持つ配列がある場合に、配列の最小絶対差を見つけることです。この概念をよりよく学ぶために、必要なものを再ブラシします。 配列 同じデータ型の要素のコンテナです。配列の長さを事前に定義する必要があります。 絶対差 は、2つの数値の差の絶対値です。つまり、差は常に正であり、負の値は正に変換されます。 各元素の最小絶対差の合計を求める必要があります。最小絶対溶質差の式は次のとおりです。 最小絶対差(a)=min(abs(a – arr [j])); ここで、1 <=j <=nおよびj!=i、 abs は絶対値です。 Input: arr = {1, 3,