2015-11-18 2 views
-4

Я создаю очень простой Tic-Tac-Toe с матрицей [N] [N]. Как проверить каждую строку, столбец и диагональ, если каждый индекс матрицы является, например, «X» или «O»? Например, если у меня есть матрица [10] [10], как я могу проверить, содержит ли первая строка все «X»? Язык C, и я должен делать это без какой-либо сложной вещи, я могу использовать только while, for, etc, not functions или что-то еще. TY!Проверка N раз, если матрица [N] [N] равна =

EDIT: Это код, который я пытался написать (он проверяет, есть ли каждый диагональный символ «X» или «O»), и он действительно работает, но только для матрицы 3x3 (классический tic-tac-toe) , Я хочу, чтобы это работало для матрицы NxN.

for (i=0; i<MAX; i++){ 
      if (matrix[i-1][i-1] == 'X' && matrix[i][i] == 'X' && matrix[i+1][i+1] == 'X') 
       flagC=1; 
      else if (matrix[i-1][i-1] == 'O' && matrix[i][i] == 'O' && matrix[i+1][i+1] == 'O') 
       flagC=1; 
+0

['memcmp()'] (http://linux.die.net/man/3/memcmp), может быть? –

+0

@SouravGhosh Как я уже сказал, я могу использовать только в циклах, для и т. Д., Я не могу использовать какую-либо функцию или что-то еще (я даже не знаю, что это такое memcmp()). Я программирую на очень низком уровне, потому что я студент, и мне нужно это делать, как меня спрашивают учителя. ^^ ' –

+0

Я голосую, чтобы закрыть этот вопрос как вне темы, потому что ОП не приложил никаких усилий для решения проблемы программирования. –

ответ

0
char check_row(char** matrix, int row, char value) 
{ 
    for(i = 0; i < N; i++) 
     if(matrix[row][i] != value) 
      return 0; 
    return 1; 
} 

char check_col(char** matrix, int col, char value) 
{ 
    for(i = 0; i < N; i++) 
     if(matrix[i][col] != value) 
      return 0; 
    return 1; 
} 

Если говорить о диагонали, вы должны сначала решить, как обозначить это число. Это не сложно, просто подумайте немного. В диагональной строке число равно номеру столбца (или N - номер столбца).

+0

извините, но это уже слишком сложно для уровня, на котором я программирую. Я думаю, что 2 вещи, которые вы написали (char check_row и т. Д.), Являются функциями или что-то еще? Мы все еще не делали этого, поэтому я не мог использовать это –

+0

@ kHz. Вы могли бы извлечь код из функций и поместить его в свою основную, если ваша школа не позволит вам использовать функции на данный момент. Я не рекомендую эту практику, хотя функции - это базовые инструменты программирования, в моей школе мы научимся использовать их в первый же день. – Kotshi

0

Так с немного мысли, строки и столбцы достаточно легко проверить:

// Check rows for 'X' 
int check; 
for(row=0; row<N; row++) 
{ 
    check = 1; 

    for(col=0; col<N; col++) 
    { 
     if(matrix[row][col] != 'X') 
      check = 0; 
    } 
    if(check) 
     printf("A row is full of 'X'\n"); 
} 

//Check cols for 'X' 
for(col=0; col<N; col++) 
{ 
    check = 1; 
    for(row=0; row<N; i++) 
    { 
     if(matrix[row][col] != 'X') 
      check = 0; 
    } 
    if(check) 
     printf("A col is full of 'X'\n"); 
} 

Диагоналями немного сложнее, но не так много. Это будет проверять верхний левый правый нижний:

// Check diagonals for 'X' 
int check = 1; 
for(col=0; col<N; col++) 
    if(matrix[col][col] != 'X') 
     check = 0; 

Чтобы проверить в правом верхнем углу на нижней части слева мы можем начать в верхнем правом углу и уменьшить значение Col вместо:

// Check opposite diagonals for 'X' 
int check = 1; 
for(col=N-1; col >= 0; col--) 
    if(matrix[col][col] != 'X') 
     check = 0; 

Примечание Я не проверял это и это просто псевдокод. Вы можете, надеюсь, адаптировать это к вашему коду, хотя :)

+0

Я уже пробовал это раньше, и это не сработает.Это потому, что если матрица [строка] [col] равна! = 'X', она проверит значение 0. Например: col и row = = 0 сначала для цикла, если матрица [0] [0] равна! = «X», он поместит проверку в 0, не проверив другие элементы строки или столбца. –

+0

Да, это то, что вы хотите, чтобы сделать это, когда вы проверяете полную строку или столбец «X» :). Для этого необходимо использовать 'X' и 'O', используя этот метод. Или вы могли бы определить два check check и checkO, например, чтобы сохранить запись двух циклов. Я написал примерно половину кода, который вам нужен. Я уверен, что это работает. – Samidamaru

+0

Ах да, извините, я понимаю вашу точку зрения. Я исправил мой код с небольшими исправлениями, чтобы исправить это. Я также проверил его на этот раз и гарантирую, что он работает :). – Samidamaru

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