当前位置: 首页 > 编程笔记 >

在C ++中找到k的2的幂并具有N的数字

苗森
2023-03-14
本文向大家介绍在C ++中找到k的2的幂并具有N的数字,包括了在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的幂加到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递归