Проблема с программой C для поиска квадрата Судоко 3x3, если существует в Matrix RXC - PullRequest
1 голос
/ 23 февраля 2020
#include <stdio.h>
#include <stdlib.h>
#define R 4
#define C 5

// functions for option 1 initializeCountArray and TestCount and Sudoku
void initializeCountArray(int *count)
{
    int i;
    for (i = 0; i < 10; i++)
        count[i] = 0;
}

int TestCount(int *count)
{
    int i;

    for (i = 1; i < 10; i++)
        if ( count[i] == 1)
            count[0]++;
    return 1;
}

int Sudoku(int mat[R][C])
{
    int count[10] = { 0 };
    int rows,cols,i,j;

    for(rows=0; rows<R-2; rows++)
    {
        for (cols = 0; cols<C-2; cols++)
        {
            initializeCountArray(count);
            for (i = rows; i <= rows+2; i++)
            {
                for (j = cols; j <= cols+2; j++)
                {
                    count[ mat[i][j] ] ++;
                    printf("\n%d,%d",i,j);
                }
            }

            printf("\n TestCount=%d",TestCount(count));
            if (TestCount(count) == 9)
                return 1;
        }
    }

    return 0;
}

void main ()
{
    int mat[R][C] = {{1,7,8,9,6},
                     {1,3,3,4,6},
                     {1,1,1,2,5},
                     {1,6,7,8,9}};

    printf ("\n Check Matrix if Suduku 3X3 square found");
    if (Sudoku(mat) == 1)
        printf("\n Sudoku square matrix was found\n");
    else
        printf("\n Sudoku square matrix NOT found\n");

}

Эта программа должна выполнить специальный тест кода c, который мы получили в классе с включенными функциями, и мы не можем использовать другие методы при запуске программы, функция TestCount выдает неправильный номер в качестве вывода I Используются тестовые распечатки индексов и я не могу понять, что не так, пожалуйста, помогите

1 Ответ

0 голосов
/ 23 февраля 2020

Прежде всего:

В вашей функции TestCount вы используете count[0] в качестве счетчика для чисел, которые появляются в подматрице 3x3. Я думаю, вы хотели сделать:

return count[0];

вместо вашего:

return 1;

Во-вторых, вы делаете это:

printf("\n TestCount=%d", TestCount(count));
if (TestCount(count) == 9)
    return 1;

Но обратите внимание на ваш TestCount имеет некоторые побочные эффекты. При первом вызове count[0] получит 9 для матрицы 3x3 в стиле Судоку, но во второй раз вы продолжите увеличивать count[0], так что он получит 18 и провалит проверку == 9 - В конце концов ваша функция Sudoku пропускает это.

Возможно, вам следует либо установить count[0] = 0; между вызовами TestCount(), сбросить count[0] на 0, прежде чем вы начнете считать в TestCount(), либо что-либо еще, о чем вы могли подумать (просто убедитесь, что вы этого не делаете переписать это).

...