Задача о 8 ферзях - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет,решил сделать программу для поиска решений,но пока,увы,застопорился. вот код:
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int i,j,sum=0,count=0;
  6. int arr[8][8];
  7. for(i=0;i<8;i++)
  8. {
  9. printf("\n");
  10. for(j=0;j<8;j++)
  11. {
  12. arr[i][j] = rand()%2;
  13. printf("%d ",arr[i][j]);
  14. }
  15. }
  16. printf("\n");
  17. for(i=0;i<8;i++)
  18. {
  19. printf("\nTotal of string %d: %d ",count+1,sum);
  20. sum = 0;
  21. count++;
  22. for(j=0;j<8;j++)
  23. sum= sum + arr[i][j];
  24. }
  25. return 0;
  26. }
точнее пока это кусок,который к "ферзям" имеет косвенное отношение,но пока не разберусь с тем,что опишу далее,дальше продвигаться не буду. Итак, рассмотрим:
Листинг программы
  1. for(i=0;i<8;i++)
  2. {
  3. printf("\nTotal of string %d: %d ",count+1,sum);
  4. sum = 0;
  5. count++;
  6. for(j=0;j<8;j++)
  7. sum= sum + arr[i][j];
  8. }
при входе в цикл строка имеет значение 1(count=0 +1) и sum прописывается,как 0. то есть,иными словами,строка имеет значение 1(что нам и нужно),а сумма в ней 0. в строке 2 прописывается сумма 1ой строки и т.д. Иными словами результаты записываются не в ту строку,причем последний вообще не считается. как можно решить данную проблему? как заставить программу писать верный результат в нужную строку? я вижу косяк,но не пойму,как это решить.

Решение задачи: «Задача о 8 ферзях»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <math.h>
  4.  
  5. int main()
  6. {
  7.     #define ROWS 8
  8.     #define COLS 12
  9.  
  10.     srand( time( 0 ) );
  11.  
  12.     int matrix[ ROWS ][ COLS ];
  13.     int _r;
  14.     int _c;
  15.  
  16.     for( _r = 0; _r < ROWS; _r++ )
  17.         for( _c = 0; _c < COLS; _c++ )
  18.             matrix[_r][_c] = rand() % 2;
  19.  
  20.     // ------- сумма по горизонтали ------
  21.  
  22.     for( _r = 0; _r < ROWS; _r++ )
  23.     {
  24.         int summ = 0;
  25.         for( _c = 0; _c < COLS; _c++ )
  26.         {
  27.             summ += matrix[_r][_c];
  28.             printf( "%2d ", matrix[_r][_c] );
  29.         }
  30.  
  31.         printf( "| %d\n", summ );
  32.     }
  33.  
  34.     for( _c = 0; _c < COLS; _c++ )
  35.         printf( "---" );
  36.  
  37.     printf( "+\n" );
  38.  
  39.     // ------- сумма по вертикали ------
  40.  
  41.     for( _c = 0; _c < COLS; _c++ )
  42.     {
  43.         int summ = 0;
  44.  
  45.         for( _r = 0; _r < ROWS; _r++ )
  46.         {
  47.             summ += matrix[_r][_c];
  48.         }
  49.  
  50.         printf( " %d ", summ );
  51.     }
  52.  
  53.  
  54.     return 0;
  55. }

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Инициализируется генератор случайных чисел
  3. Создается двумерный массив для хранения чисел
  4. Заполняется двумерный массив случайными числами от 0 до 1
  5. Вычисляется сумма чисел по каждой горизонтали и выводится на экран
  6. Выводится горизонтальная линия из символов -
  7. Вычисляется сумма чисел по каждой вертикали и выводится на экран
  8. Выводится вертикальная линия из символов +
  9. Программа заканчивает свою работу

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут