我编写了一个简单的C ++程序来查找数组的最小和值。我有arr[12] = {1, 2, 4, 8, 16,32, 64, 128, 256, 512, 1024, 2048}
。我想计算该数组中有多少最小值来实现int p
。例如,p = 10
,有2个索引,其最小值满足整数p,即arr[1] = 2
和arr[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();
}
我想我有一个简单的错误,但我找不到它。
答案 0 :(得分:0)
将c = 0的值更改为c = 12,因为我可以看到你的arr2数组将保存12个值,每个值出现一次来自arr数组。