2の累乗であり、C++で合計Nを持つk個の数値を見つけます
NとKの2つの数値があるとします。タスクは、2の累乗で合計がNであるKの数値を出力することです。それが不可能な場合は、-1を返します。 。 N=9およびK=4とすると、出力は4 2 2 1になり、その合計は9で、要素の数は4であり、それぞれが2の累乗です。
この問題を解決するには、次の手順に従う必要があります-
-
kがNのセットビット数よりも小さいか、Nよりも大きい場合は、-1を返します
。 -
設定されたビットで2の累乗を優先キューに追加します
-
K個の要素を取得するまで優先キューを開始してから、その要素を優先キューから削除します
-
削除した要素/2を優先キューに再度2回挿入します
-
k個の要素が達成されたら、それらを印刷します。
例
#include<iostream> #include<algorithm> #include<queue> using namespace std; void displayKnumbers(int n, int k) { int set_bit_count = __builtin_popcount(n); if (k < set_bit_count || k > n) { cout << "-1"; return; } priority_queue<int> queue; int two = 1; while (n) { if (n & 1) { queue.push(two); } two = two * 2; n = n >> 1; } while (queue.size() < k) { int element = queue.top(); queue.pop(); queue.push(element / 2); queue.push(element / 2); } int ind = 0; while (ind < k) { cout << queue.top() << " "; queue.pop(); ind++; } } int main() { int n = 30, k = 5; cout << "Numbers are: "; displayKnumbers(n, k); }
出力
Numbers are: 8 8 8 4 2
-
n個の数のGCDとLCMを見つけるためのC++プログラム
これは、n個の数のGCDとLCMを見つけるためのコードです。すべてがゼロではない2つ以上の整数のGCDまたは最大公約数は、各整数を除算する最大の正の整数です。 GCDは最大公約数としても知られています。 2つの数値の最小公倍数(LCM)は、両方の数値の倍数である最小公倍数(ゼロではない)です。 アルゴリズム Begin Take two numbers as input Call the function gcd() two find out gcd of n numbers Call the function l
-
再帰を使用して自然数の合計を見つけるC++プログラム
自然数は1から始まる正の整数です。 自然数のシーケンスは-です 1, 2, 3, 4, 5, 6, 7, 8, 9, 10…… 再帰を使用して最初のn個の自然数の合計を見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int sum(int n) { if(n == 0) return n; else return n + sum(n-1); } int main() { &