2016-08-08 2 views
-4

В чем разница между этими двумя кодами? Я думаю, что это тот же код.C программирование/какая разница между этими двумя кодами

Он не может работать как с кодом, так и с Visual Studio. codeup.kr 1505 проблема

Проблема массива когда вы кладете номер его это делает Num * Num массив

Например, учитывая Num = 3, он создает:

1 2 3 

8 9 4 

7 6 5 

код 1:

#include<stdio.h> 
#include<string.h> 

int main() 
{ 
int tile[52][52]; 
int x, y; 
int num; 
int start = 1; 
int check = 1, complete = 1; 
int i; 

scanf("%d", &num); 
memset(tile, 0, 4 * 52 * 52); 


tile[0][1] = 10; 
tile[1][num + 1] = 10; 
tile[num + 1][num + 1] = 10; 
tile[num + 1][0] = 10; 

x = 1; y = 1; 
for (i = 0; i <= 3000; i++) 
{ 
    switch (check) 
    { 
    case 1: 
    { 
     if (tile[x][y + 1] != 0) 
     { 

      check += 1; 
      break; 
     } 
     tile[x][y++] = start; 
     start++; 
     complete++; 
     break; 

    } 
    case 2: 
    { 
     if (tile[x + 1][y] != 0) 
     { 
      check += 1; 
      break; 
     } 
     tile[x++][y] = start; 
     start++; 

     complete++; 
     break; 
    } 
    case 3: 
    { 
     if (tile[x][y - 1] != 0) 
     { 
      check += 1; 
      break; 
     } 
     tile[x][y--] = start; 
     start++; 
     complete++; 
     break; 
    } 
    case 4: 
    { 
     if (tile[x - 1][y] != 0) 
     { 
      check = 1; 
      break; 
     } 
     tile[x--][y] = start; 
     start++; 
     complete++; 
     break; 
    } 

    } 
    if (complete == num*num) 
    { 
     break; 
    } 
} 


if (num % 2 == 0) 
{ 
    tile[x][y] = start; 
} 
else 
{ 
    tile[x][y++] = start; 
} 


for (x = 1;x <= num; x++) 
{ 
    for (y = 1; y <= num; y++) 
    { 
     printf("%d ", tile[x][y]); 
    } 
    printf("\n"); 
} 

} 

Этот код работает в Visual Studio.

#include<stdio.h> 


int main() 
{ 
int tile[52][52]; 
int x, y; 
int num; 
int start = 1; 
int check = 1, complete = 1; 
int i; 

scanf("%d", &num); 
for (x = 0;x <= num; x++) 
{ 
    for (y = 0; y <= num; y++) 
    { 
     tile[x][y] = 0; 
    } 
} 
tile[0][1] = 10; 
tile[1][num+1] = 10; 
tile[num + 1][num + 1] = 10; 
tile[num + 1][0] = 10; 

x = 1; y = 1; 
for (i = 0; i <= 3000; i++) 
{ 
    switch (check) 
    { 
    case 1: 
    { 
     if (tile[x][y + 1] != 0) 
     { 

      check += 1; 
      break; 
     } 
     tile[x][y++] = start; 
     start++; 
     complete++; 
     break; 

    } 
    case 2: 
    { 
     if (tile[x + 1][y] != 0) 
     { 
      check += 1; 
      break; 
     } 
     tile[x++][y] = start; 
     start++; 

     complete++; 
     break; 
    } 
    case 3: 
    { 
     if (tile[x][y - 1] != 0) 
     { 
      check += 1; 
      break; 
     } 
     tile[x][y--] = start; 
     start++; 
     complete++; 
     break; 
    } 
    case 4: 
    { 
     if (tile[x - 1][y] != 0) 
     { 
      check = 1; 
      break; 
     } 
     tile[x--][y] = start; 
     start++; 
     complete++; 
     break; 
    } 

    } 
    if (complete == num*num) 
    { 
     break; 
    } 
} 

if (num % 2 == 0) 
{ 
    tile[x][y] = start; 
} 
else 
{ 
    tile[x][y++] = start; 
} 


for (x = 1;x <= num; x++) 
{ 
    for (y = 1; y <= num; y++) 
    { 
     printf("%d ", tile[x][y]); 
    } 
    printf("\n"); 
} 

} 

ответ

1

Разница:

$ diff -w one.c two.c2,3d1 

< #include<string.h> 
< 
14,15c12,16 
< memset(tile, 0, 4 * 52 * 52); 
< 
--- 
> for (x = 0; x <= num; x++) { 
>  for (y = 0; y <= num; y++) { 
>  tile[x][y] = 0; 
>  } 
> } 
95a97 
> 

так, первый из них использует MemSet, чтобы установить все записи о tile 0 (ноль), а второй использует цикл, чтобы установить толькозаписи tile до нуля, которые используются, содержимое остальных ячеек не определено, может быть всем. Вы можете найти места, где x и/или y находятся за пределами 0 <= x <= num < 52 в вашем коде, либо выполните отладчик, либо используйте printf() s, чтобы найти точные места.

Если вы не хотите использовать memset() или не могут слишком: просто изменить цикл к нулю каждую клетку из:

for (x = 0; x < 52; x++) { 
    for (y = 0; y < 52; y++) { 
    tile[x][y] = 0; 
    } 
} 
+0

спасибо за ваши советы. – holicmiku

Смежные вопросы