На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Задача на проверку судоку , Происходит что-то не ясное....
    Добрый вечер.

    Только начинаю изучать С и программирование в целом. Задали написать программу, которая будет проверять судоку (до размеров 25х25). Можно использовать только циклы (while, do...while, for), переменные (включая bool), массивы и, впринципе, на этом всё...
    Долго сидел, вроде получилось, но при запуске, если судоку неправильныйЮ то всё ОК, а вот если правильный то программа, как будто бы входит в бесконечный цикл.

    Похожу, что ошибку самостоятельно найти не смогу...

    ExpandedWrap disabled
      /*-------------------------------------------------------------------------
        Include files:
      --------------------------------------------------------------------------*/
       
      #include <stdio.h>
      #include <stdlib.h>
      #include <stdbool.h>
       
       
      /*=========================================================================
        Constants and definitions:
      ==========================================================================*/
       
      /* put your #defines and typedefs here*/
      #define MAX_SIZE 25
       
      void printOpenMessageForSodokoSize();
      void printOpenMessageForSodokoSolution();
      void printValidSolution();
      void printBadSolution();
      int root (int a);
      void fill_sudoku (int a [][MAX_SIZE], int len);
      bool check_sudoku_lines_columns (int a [][MAX_SIZE], int len);
      bool check_sudoku_squares (int a [][MAX_SIZE], int len);
       
       
      /*-------------------------------------------------------------------------
        The main program. (describe what your program does here)
       -------------------------------------------------------------------------*/
      int main()
      {
          printOpenMessageForSodokoSize();
       
          int n = 0;
       
          while (scanf("%d", &n) !=1 || n < 1 || root(n) < 1)
          {
       
          }
          printOpenMessageForSodokoSolution();
       
          int sudoku [MAX_SIZE][MAX_SIZE] = {{0}};
       
          fill_sudoku(sudoku, n);
       
          if (check_sudoku_lines_columns(sudoku, n) &&
          check_sudoku_squares(sudoku, n))
          {
              printValidSolution();
          }
          else
          {
              printBadSolution();
          }
       
          return 0;
      }
       
      void printOpenMessageForSodokoSize(){
          printf("Please enter the size of your soduko:\n");
      }
       
      void printOpenMessageForSodokoSolution(){
          printf("Please enter your solution:\n");
      }
       
      void printValidSolution(){
          printf("Valid solution!\n");
      }
       
      void printBadSolution(){
          printf("Bad solution!\n");
      }
       
      int root (int a) //Returns root
      {
          for (int i = 0; i * i <= a; i++)
          {
              if (i * i == a)
              {
                  return i;
              }
          }
          return -1;
      }
       
      void fill_sudoku (int a [][MAX_SIZE], int len)
      {
          for (int i = 1; i <= len; i++)
          {
              for (int j = 1; j <= len; j++)
              {
                  if (scanf("%d", &a[i][j]) != 1)
                  {
                      return;
                  }
              }
          }
      }
       
      bool check_sudoku_lines_columns (int a [][MAX_SIZE], int len)
      {
          bool sudoku_checker = true;
       
          for (int i = 1; i <= len; i++)
          {
              for (int j = 1; j <= len; j++)
              {
                  for (int k = 1; k <= len - j; k++)
                  {
                      sudoku_checker = a[i][j] - a[i][j+k];
       
                      if (sudoku_checker == false)
                      {
                          return sudoku_checker;
                      }
                  }
              }
          }
       
       
          for (int i = 1; i <= len; i++)
          {
              for (int j = 1; j <= len; j++)
              {
                  for (int k = 1; k <= len - j; k++)
                  {
                      sudoku_checker = a[j][i] - a[j+k][i];
       
                      if (sudoku_checker == false)
                      {
                          return sudoku_checker;
                      }
                  }
              }
          }
          return true;
      }
       
      bool check_sudoku_squares (int a [][MAX_SIZE], int len)
      {
          bool sudoku_checker = true;
       
          for (int i = 1; i <= len; i + root(len))
          {
              for (int j = 1; j <= len; j + root(len))
              {
                  for (int k = i; k < i + root(len); ++k)
                  {
                      for (int l = j; l < j + root(len); ++l)
                      {
                          for (int x = i; x < i + root(len); ++x)
                          {
                              for (int y = j; y < j + root(len); ++y)
                              {
                                  sudoku_checker = a[k][l] - a[x][y];
       
                                  if (k == x && l == y)
                                  {
                                      sudoku_checker = true;
                                  }
                                  else if (sudoku_checker == false)
                                  {
                                      return sudoku_checker;
                                  }
                              }
                          }
                      }
                  }
              }
          }
          return true;
      }
      Возможно, вы в первых двух циклах функции check_sudoku_squares записали '+' вместо '+=' (где "i+root(len)").
        Блин, даже не обратил внимание, сейчас проверю, спасибо)

        Добавлено
        Работает, спасибо огромное!!! :thanks:
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0208 ]   [ 16 queries used ]   [ Generated: 29.03.24, 15:23 GMT ]