Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2014, 18:46   #1
g[]Iz
 
Регистрация: 28.04.2014
Сообщений: 3
По умолчанию Задача о 8 слонах

Найти хотя бы одну расстановку 8 слонов на шахматной доске, когда каждое поле находится под ударом одного из них.
Я сделал алилуя.
Код:
#include <conio.h>  
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
void show_map(int deck[][8]);
void fun (int deck[][8])
{
int s;   // координаты постановки фигур
int c;   // координаты постановки фигур
int S=0; // количество слонов
while(S!=8) //цикл пока слонов не станет восемь
{
do
    {
        s=rand()%8;
        c=rand()%8;
    }
while(deck[s][c]!=1);  // пока слон не встанет на не "битое" поле

deck[s][c]=8;//присваиваем клетке на доске значение "8 - слон"
int j=1;

while((s+j)<8 && (c+j)<8)//присваиваем всем "битым" клеткам значение "0"
    {
        deck[s+j][c+j]=0;
        j++;
    }
    j=1;
while((s-j)>=0 && (c-j)>=0)//присваиваем всем "битым" клеткам значение "0"
    {
        deck[s-j][c-j]=0;
        j++;
    }
    j=1;
while((s+j)<8 && (c-j)>=0)//присваиваем всем "битым" клеткам значение "0"
    {
        deck[s+j][c-j]=0;
        j++;
    }
    j=1;
while((s-j)>=0 && (c+j)<8)//присваиваем всем "битым" клеткам значение "0"
    {
        deck[s-j][c+j]=0;
        j++;
    }
    S++;
}
show_map(deck);//выводим доску со слонами на экран
}

void show_map(int deck[][8])
{
    int sum=0;
    for (int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
            {
                sum=sum+deck[i][j];
            }
    }
    if(sum>64)
    {
        sum=0;
        for (int i=0;i<8;i++)
        for(int j=0;j<8;j++)
                deck[i][j]=1;
        fun(deck);
    }
    else
    {
        for (int i=0;i<8;i++)
        {
        for(int j=0;j<8;j++)
            {

                printf("%d ", deck[i][j]);
            }
          printf("\n");
        }
    }
}
int main()
{
    srand((time(NULL))); // начальное значение для rand()
int deck[8][8];//массив шахматного поля
for (int i=0;i<8;i++)
        for(int j=0;j<8;j++)
                deck[i][j]=1; // инициализируем единицами
fun(deck);
getch();
}

Последний раз редактировалось g[]Iz; 28.04.2014 в 20:19.
g[]Iz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51