2017-03-20 11 views
0

Dies ist mein Code für Project Euler: Problem 11Array Werte ohne Grund ändert

int main(int argc, char** argv) { 
char stevila [1600] = "08022297381500400075040507785212507791084949994017811857608717409843694804566200814931735579142993714067538830034913366552709523046011426924685601325671370236912231167151676389419236542240402866331380244732609903450244753353783684203517125032988128642367102638406759547066183864706726206802621220956394396308409166499421245558056673992697177878968314883489637221362309750076442045351400613397343133957817532822753167159403800462161409535692163905429635314755588824001754243629855786560048357189070544443744602158515417581980816805944769287392138652177704895540045208839735991607975732162626793327986688366887576220720346336746551232639353690442167338253911249472180846293240627636206936417230238834629969826759857404361620733529783190017431497148868116235705540170547183515469169233486143520189196748"; 
int stevilaGrid [20][20]; 
int stevilaRacunanje[4][4]; 
int stevecPoStevilih = 0; 
for (int i = 0; i < 20; i++) { 
    for (int j = 0; j < 20; j++) { 
     stevilaGrid[i][j] = (stevila[stevecPoStevilih] - 48)*10 + stevila[stevecPoStevilih + 1] - 48; 
     stevecPoStevilih += 2; 
    } 
} 

int rezultat [10]; 
int najvecji = 0; 
int trenutni; 
int temp = 0; 
for (int i = 0; i < 17; i++) { 
    for (int j = 0; j < 17; j++) { 

     //problems start here 
     for (int k = 0; k < 5; k++) { 
      for (int l = 0; l < 5; l++) { 
       temp = stevilaGrid[i + k][j + l]; 
       stevilaRacunanje[k][l] = temp; 
      } 
     } 
     for (int k = 0; k < 5; k++) { 
      rezultat[k] = stevilaRacunanje[k][0] * stevilaRacunanje[k][1] * stevilaRacunanje[k][2] * stevilaRacunanje[k][3]; 
      rezultat[k+4] = stevilaRacunanje[0][k] * stevilaRacunanje[1][k] * stevilaRacunanje[2][k] * stevilaRacunanje[3][k]; 
     } 
     rezultat[8] = stevilaRacunanje[0][0] * stevilaRacunanje[1][1] * stevilaRacunanje[2][2] * stevilaRacunanje[3][3]; 
     rezultat[9] = stevilaRacunanje[0][3] * stevilaRacunanje[1][2] * stevilaRacunanje[2][1] * stevilaRacunanje[3][0]; 
     for (int k = 0; k < 10; k++) { 
      trenutni = rezultat[k]; 
      if(trenutni > najvecji){ 
       najvecji = trenutni; 
      } 
     } 
    } 
} 
printf("Najvecji zmnozek: %d", najvecji); 

return (EXIT_SUCCESS); 
} 

Zuerst habe ich die Zahlenfolge in eine 2D-int-Array konvertieren.

Dann versuche ich das Raster in kleinere 4x4 Quadrate zu unterteilen, mit denen ich leichter arbeiten kann. Hier beginnen die Probleme (wie im Code markiert).

Am Anfang (*i=0,j=0;k=4,j=0*) beginnt etwas Seltsames zu passieren. Die Werte in *stevilaGrid[][]* beginnen sich zufällig und scheinbar grundlos zu ändern.

Kann mir bitte jemand das erklären. Ich habe dieses Verhalten unter Windows mit Cygwin 64bit und Ubuntu mit GCC 64bit getestet.

+2

Sie sind außerhalb der Grenzen auf dem Array-Indizierung gehen. – user2357112

Antwort

0
[i + k][j + l]; 

Wenn i==16 und k==4 oder j==16 und j==4 Sie Element [20] Ihr Array nur 0 geht ... 19 schlagen werden