数组中最小值的总和

时间:2017-07-01 06:45:16

标签: c++ arrays

我编写了一个简单的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();
}

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

1 个答案:

答案 0 :(得分:0)

将c = 0的值更改为c = 12,因为我可以看到你的arr2数组将保存12个值,每个值出现一次来自arr数组。