Ich habe ein einfaches C++ - Programm geschrieben, um die minimalen Summenwerte eines Arrays zu finden. Ich habe arr[12] = {1, 2, 4, 8, 16,32, 64, 128, 256, 512, 1024, 2048}
. Ich möchte zählen, wie viele Mindestwerte von diesem Array zu erfüllen sind int p
. Beispiel: p = 10
, Es gibt 2 Indizes mit Mindestwerten, die die Ganzzahl p erfüllen. Dies sind arr[1] = 2
und arr[3] = 8
. Ich habe dieses Problem mit einer Art binärer Konvertierungsmethode gelöst. Ich speichere diese Binärdateien in ein neues Array arr2[]
und summiere alle diese Binärdateien, so dass ich die Antwort 2 im Beispiel bekomme. Aber ich stoße auf ein Problem, wenn die Eingabe p = 1024
ist, aus irgendeinem Grund Array-Werte in der zweiten Schleife nicht speichern int m
Wert aus der ersten for-Schleife. Dies gilt nur für 1024, nicht für andere Eingabe (oder noch nicht gefunden). Kann jemand erklären, warum das passiert ?. Hier ist mein Code:Summe der Minimalwerte aus Array
#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();
}
Ich denke, ich habe einen einfachen Fehler, aber ich konnte es nicht finden.
'int arr2 [c];' ist falsch. –
können Sie erklären, warum ist das falsch? – Octwo
1. Arrays mit variabler Länge sind keine Standard-C++. 2. 'c' ist zu dem Zeitpunkt, zu dem das Array erzeugt wird," 0 ". Der Zugriff darauf führt zu einem nicht definierten Verhalten. –