假设我们有两个数字N和K。任务是打印K个数字,它们是2的幂,并且它们的和是N。如果不可能,则返回-1。假设N = 9且K = 4,则输出为4 2 2 1,其总和为9,元素个数为4,每个元素的乘方为2。
我们必须按照以下步骤来解决这个问题-
如果k小于N中的设置位数或大于N,则返回-1
将设置位的2的幂加到Priority队列中
启动优先级队列,直到获得K个元素,然后从优先级队列中删除该元素
再次将删除的element / 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
本文向大家介绍在C ++中找到(1 ^ n + 2 ^ n + 3 ^ n + 4 ^ n)mod 5,包括了在C ++中找到(1 ^ n + 2 ^ n + 3 ^ n + 4 ^ n)mod 5的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将解决以下问题。 给定一个整数n,我们必须找到(1 n +2 n +3 n +4 n)%5 如果n大,则数字(1 n +2 n +3 n +4
问题内容: java.util.Random源代码的第294行说 为什么是这样? 问题答案: 该描述并不完全准确,因为0不是2的幂。更好的说法是 当n是2的幂或2的幂的负数或零时。 如果n是2的幂,则二进制中的n是单个1,后跟零。-n为2的补数是倒数+ 1,因此位排成一行 要了解其工作原理,请将二进制补码视为逆+ 1。 因为当您添加一个得到两个的补码时,您会一直进行到一个。 如果n不是2的幂,则结
本文向大家介绍PHP程序查找不是特定数字'k'的幂的前n个自然数的和,包括了PHP程序查找不是特定数字'k'的幂的前n个自然数的和的使用技巧和注意事项,需要的朋友参考一下 为了找到不是特定数字'k'的幂的前n个自然数的总和,代码如下- 示例 输出结果 定义了一个名为“ sum_of_nums”的函数,该函数计算不是一定值幂的自然数之和。数字和非幂数字将作为参数传递给此函数。在函数外部,分别定义n和
我试图学习分布式计算,并遇到了一个寻找大量数字的中位数的问题: 假设我们有一大组数字(假设元素数为 N*K),它们无法放入内存(大小为 N)。我们如何找到这些数据的中位数?假设在内存上执行的操作是独立的,即我们可以考虑有K台机器,每台机器最多可以处理N个元素。 我认为中位数可以用于这个目的。我们可以一次将N个数装入内存。我们在< code>O(logN)时间内找到该集合的中值,并保存它。 然后我们
本文向大家介绍在C ++中的BST中找到具有给定总和的对,包括了在C ++中的BST中找到具有给定总和的对的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序,在二进制搜索树中找到总和等于给定数字的对。 我们将在两个不同的列表中存储树的值和树的值以查找对。让我们看看解决问题的步骤。 为二叉树创建一个结构节点。 编写一个函数以将新节点插入二进制搜索树。 请记住,在二叉搜索树中,所
本文向大家介绍在C ++中找到2 ^(2 ^ A)%B,包括了在C ++中找到2 ^(2 ^ A)%B的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个程序来计算等式2 ^(2 ^ A)%B。 我们将使用递归函数找到方程的值。让我们看看解决问题的步骤。 编写一个带有2个参数A和B的递归函数。 如果A为1,则将4%B返回为2 ^(2 ^ 1)%B = 4%B. 否则用A-1和b递归