2017-07-01 2 views
0

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.

+1

'int arr2 [c];' ist falsch. –

+0

können Sie erklären, warum ist das falsch? – Octwo

+2

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. –

Antwort

0

Ändern Sie den Wert von c = 0 bis c = 12, da ich sehen kann, dass Ihr arr2-Array 12 Werte enthält, einen für jedes Auftreten von Werten aus arr-Array.

+0

Vielen Dank, @Shirish jetzt funktioniert es. Ich hatte Recht, dass ich einen einfachen Fehler hatte: D – Octwo