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

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

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

Всем привет,решил сделать программу для поиска решений,но пока,увы,застопорился. вот код:
#include <stdio.h>
#include <stdlib.h>
 
int main() 
{
int i,j,sum=0,count=0;
int arr[8][8];
 
for(i=0;i<8;i++)
{
    printf("\n");
    for(j=0;j<8;j++)
    {
    arr[i][j] = rand()%2;
    printf("%d ",arr[i][j]);
    }
}
printf("\n");
 
for(i=0;i<8;i++)
    {
    printf("\nTotal of string %d: %d ",count+1,sum);
    sum = 0;
    count++;
    for(j=0;j<8;j++)
        sum= sum + arr[i][j];
    }
return 0;
}
точнее пока это кусок,который к "ферзям" имеет косвенное отношение,но пока не разберусь с тем,что опишу далее,дальше продвигаться не буду. Итак, рассмотрим:
for(i=0;i<8;i++)
    {
    printf("\nTotal of string %d: %d ",count+1,sum);
    sum = 0;
    count++;
    for(j=0;j<8;j++)
        sum= sum + arr[i][j];
    }
при входе в цикл строка имеет значение 1(count=0 +1) и sum прописывается,как 0. то есть,иными словами,строка имеет значение 1(что нам и нужно),а сумма в ней 0. в строке 2 прописывается сумма 1ой строки и т.д. Иными словами результаты записываются не в ту строку,причем последний вообще не считается. как можно решить данную проблему? как заставить программу писать верный результат в нужную строку? я вижу косяк,но не пойму,как это решить.

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

textual
Листинг программы
#include <stdio.h>
#include <time.h>
#include <math.h>
 
int main()
{
    #define ROWS 8
    #define COLS 12
 
    srand( time( 0 ) );
 
    int matrix[ ROWS ][ COLS ];
    int _r;
    int _c;
 
    for( _r = 0; _r < ROWS; _r++ )
        for( _c = 0; _c < COLS; _c++ )
            matrix[_r][_c] = rand() % 2;
 
    // ------- сумма по горизонтали ------
 
    for( _r = 0; _r < ROWS; _r++ )
    {
        int summ = 0;
        for( _c = 0; _c < COLS; _c++ )
        {
            summ += matrix[_r][_c];
            printf( "%2d ", matrix[_r][_c] );
        }
 
        printf( "| %d\n", summ );
    }
 
    for( _c = 0; _c < COLS; _c++ )
        printf( "---" );
 
    printf( "+\n" );
 
    // ------- сумма по вертикали ------
 
    for( _c = 0; _c < COLS; _c++ )
    {
        int summ = 0;
 
        for( _r = 0; _r < ROWS; _r++ )
        {
            summ += matrix[_r][_c];
        }
 
        printf( " %d ", summ );
    }
 
 
    return 0;
}

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

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

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


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

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

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