ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Задачка-головоломка
  #1  
Старый 28.11.2007, 11:03
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию Задачка-головоломка

Вместо того чтобы учить студентов первых-вторых курсов информатике, нам сунули в зубы *censored* учебник какого-то препода, в котором задачки не столько на знание Си, сколько на соответствие уровню умственного развития как минимум Шерлока Холмса или блин Цезаря и кто там самый умный был =\

Ладно, постараюсь всё обьяснить как можно более внятно.

Задача:
Тема: рекурсивный вызов функции.
11. Разместить на шахматной доске максимальное количество слонов и ладей так,
чтобы они не находились друг у друга " под боем" .

Прога должна вернуть количество ладей и слонов, которым удалось уместиться.

Известно что:
- Ладья, не имея ограничений, может передвигаться на любое расстояние по горизонтали и вертикали.

- Слон ходит по диагонали на любое расстояние.


Первое же препятствие в решении задачи: в какой последовательности ставить слонов и ладьи на доску, так чтобы они заняли всё пространство?
По логике - прогоняем все клетки доски и ставим по очереди то ладью, то слона, так чтобы никто никого не мог сбить. Разделения на белых и чёрных тут нет.

Вот что получается:


Как видите, справа осталось полным полно клеток, куда можно поставить фигуры с сохранением условия.

Как рекурсией обойти и те клетки тоже? =\
Либо надо поменять порядок вставки слонов и ладей, но ведь он вообще нигде не оговорён, как я могу придумывать его? Тогда это уже вообще идиотизм, я не Си изучаю, а шахматы

И вот код, который я набросал:
Код:
#include <stdio.h>


void count(int x, int y, char model, int doska[8][8]){

for(int i=0; i<8; i++)
	for(int j=0; j<8; j++)
		if(doska[i][j] == 1)
			printf("shit");

};



void main(){

	int doska[8][8] = {0};
	doska[2][3] = 1;
	int ladja = 0;
	int slon = 0;

	int x = 0;
	int y = 0;
	
	char model = 'l'; // l = ladja, s = slon

    printf("\nBefore counting: \n\n");
	for(int i=0; i<8; i++)
		for(int j=0; j<8; j++){
					if(j==0)
					printf("\n");
		printf("%d ", doska[i][j]);
		}
    printf("\n\n");

	// start function 
	count(0,0,model, doska);
	// end function

    printf("\n---------------------------------------\nAfter counting: \n\n");
	for(i=0; i<8; i++)
		for(int j=0; j<8; j++){
					if(j==0)
					printf("\n");
		printf("%d ", doska[i][j]);
		}
    printf("\n\nLadja: %d\nSlon: %d\n\n", ladja, slon);


}
мне кажется, надо вызывать функцию рекурсией, поочерёдно задавая её фигуру для вставки, отличную от предыдущей.
Но главная проблема в том, что я не знаю как проверить оставшиеся клетки =\
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка StocKeR Болталка 1 07.10.2007 21:23
Головоломка для sql мастеров) k1b0rg Болталка 15 09.02.2007 19:25
задачка по повуду Август?!?! Butter Чаты 5 21.01.2007 02:36
Задачка для админов. Две сетевых и два провайдера. Егорыч+++ *nix 6 12.12.2006 17:03



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ