数组中最小值的总和

Sum of minimum values from array

本文关键字:最小值 数组      更新时间:2023-10-16

我编写了一个简单的C++程序来查找数组的最小总和值。我有arr[12] = {1, 2, 4, 8, 16,32, 64, 128, 256, 512, 1024, 2048}.我想计算该数组中有多少个最小值来满足int p.例如p = 10,有2个索引的最小值满足整数p,即arr[1] = 2arr[3] = 8。我用某种二进制转换方法解决了这个问题。我将这些二进制文件保存到新的数组arr2[]中,并将所有这些二进制文件相加,以便在示例中得到答案 2。但是我遇到了一个问题,如果输入p = 1024,由于某种原因,第二个 for 循环中的数组值没有保存第一个 for 循环int m值。这仅适用于 1024,不适用于其他输入(或尚未找到(。有人可以解释为什么会发生这种情况吗?这是我的代码:

#include <stdio.h>
#include <conio.h>
int main()
{
 int t, p, c=0;
 int arr[12] = {1,2,4,8,16,32,64,128,256,512,1024,2048};
 int arr2[c];
 scanf("%d", &t);
 while(t--)
 {
  int sum = 0, m = 0;
  scanf("%d", &p);
  for(int i = 11; i>=0; i--)
  {            
    m = p/arr[i];
    p = p - m*arr[i];                                                        
    arr2[i] = m;
    printf("%d ", m); 
  }
  printf("n");
  for(int i = 11; i>=0; i--)
  {
    sum+=arr2[i];
    printf("%d ", arr2[i]);
  }
  printf("n SUM : %d n", sum);
 }
getch();
}

我想我有一个简单的错误,但我找不到它。

将 c=0 的值更改为 c=12,因为我可以看到您的 arr2 数组将包含 12 个值,每次出现 arr 数组中的值。