在 C++ 中查詢 k 個 2 的冪,其和為 N
假設我們有兩個數字 N 和 K。任務是列印 K 個數字,這些數字是 2 的冪,並且它們的和為 N。如果不可能,則返回 -1。假設 N = 9 且 K = 4,則輸出將為 4 2 2 1,其和為 9,元素數量為 4,並且每個元素都是 2 的冪。
我們必須遵循以下步驟來解決此問題:
如果 k 小於 N 中設定位的數量或大於 N,則返回 -1
將設定位處的 2 的冪新增到優先順序佇列中
初始化優先順序佇列,直到我們獲得 K 個元素,然後從優先順序佇列中刪除元素
將刪除的元素/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
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP