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);


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

  #2  
Старый 28.11.2007, 12:00
Ci5
Постоянный
Регистрация: 10.10.2006
Сообщений: 316
Провел на форуме:
1572471

Репутация: 152
Отправить сообщение для Ci5 с помощью ICQ
По умолчанию

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

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

Репутация: 537


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

2 Ci5
согласен тока вот задачу надо решить к зимней сессии
 
Ответить с цитированием

  #4  
Старый 28.11.2007, 13:00
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


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

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

У тебя на картинке все ладьи под боем - или "под боем" не должны быть слоны с ладьями а друг с другом можно?

Итог задачи это втиснуть как можно больше "каких нибудь фигур" ну т.е. например 18 слонов это более удачная позиция чем 10 слонов и 2 ладьи???

Или кол во слонов и ладей (ладьев :-)) должно быть одинаковым?

Последний раз редактировалось spider-intruder; 28.11.2007 в 13:08..
 
Ответить с цитированием

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

Репутация: 537


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

2 spider-intruder
+1 я сам озадачен подобными вопросами.

У меня на картинке ни один слон не может побить ни одну ладью и наоборот.
Имхо, надо разместить как можно больше и тех и тех.

fucking аффтар учебника *WALL*
 
Ответить с цитированием

  #6  
Старый 28.11.2007, 13:30
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


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

Узнай точно имеет ли право (по условию) тура бить туру ? Или слон слона
Если да тонапиздячб всю доску турами ИЛИ слонами и у ьтя будет ответ 64*0

Если нетто твой рисунок не верен так как тура бьет туру и ставить на 1 линии их нельзя

Мне самому интересно - давай уточни условие и будем писать )))

(это вам не кавычки тулить )
 
Ответить с цитированием

  #7  
Старый 28.11.2007, 13:37
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


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

Вот что еще заметил (ну это очевидно просто как вариант)

Нельзя размешать 1 фигуру возле другой ближе чем на 2 клетки...ну... т.е.

Так ставить нельзя:

Для туры: Y-тура X- Слон
xxx
xxxxyxxx
xxx
Для слона:
х х
xxx
xyx
xxx
х х

Может сначала разбить поле (иатрицу на подматрицы) 3*3 и как то от этого плясать


ФОРМАТИРОВАНИЕ СДОХЛО! В асю стукни 988686ШЕСТЬ
 
Ответить с цитированием

  #8  
Старый 28.11.2007, 13:50
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

2spider-intruder естественно сумма фигур имеется ввиду, потому что не было введено понятия цены слона и ладьи.
по теме - не вижу ничего сложного. сложность правда будет не просто оценить, потому что сразу сказать сколько вариантов лишних отметает одна фигура не ясно. с другой стороны тк задача расчитана на первокурсников все должно сводиться к "бездумному" перебору, вот примерный псевдокод:
Код:
int pole[8][8];
int pole_temp[8][8];
...
int sum(int num)
{
  int i,j;
  int max=0;

  //bool ok=false;
  for(i=0;i<8;i++)
   for(j=0;j<8;j++)
     if(pole[i][j]==0)
     {
      ok=true;
      memcpy(&pole_temp[0][0], &pole[0][0], sizeof(pole));
      put(i,j,type);
      int s1=sum(num+1);
      memcpy(&pole[0][0], &pole_temp[0][0], sizeof(pole));
      put(i,j,Obratnyi(type)));
      int s2=sum(num+1);
      memcpy(&pole[0][0], &pole_temp[0][0], sizeof(pole));
      if(s2>s1) s1=s2;
      if(max<s1) max=s1;
     }

  //if(!ok) return 0;
  return num+max;
}
...
sum(0);
--
put - ставим фигуру и обозначаем клетки, что под "боем", например -1. Obratnyi - если слон, то ладья и наоборот.
--
2spider-intruder это первый курс, не думайте что от вашего "колледжа" или чего там, от вас потребуют сильных мозгов. и еще, можно ставить ближе чем на две клетки, пример:
*SSSSSSS
********
********
********
********
********
********
*SSSSSSS

S - слоны)

Последний раз редактировалось ZaCo; 28.11.2007 в 14:01..
 
Ответить с цитированием

  #9  
Старый 28.11.2007, 13:55
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


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

Я так понимаю что это лаботаторная 4 задание 10 ;-)
Судя по всему речь идет о том что слоны могут бить слонов но не тур и наоборот. т.е. твоя картинка пока что верна. НУ ИМХО Конечно!

http://forum.ixbt.com/topic.cgi?id=26:37553 - BlackLor (Pell)
НЕ верно сказал! Так не делай.

Твой ответ будет 8 слонов в первой строке и еше нсколько внизу!!! А у тебя надо посчитать максималку того и того... Надо мудрить с квадратами 3*3 кароче в асю )

Последний раз редактировалось spider-intruder; 28.11.2007 в 14:28..
 
Ответить с цитированием

  #10  
Старый 28.11.2007, 14:05
spider-intruder
Постоянный
Регистрация: 10.12.2005
Сообщений: 939
Провел на форуме:
3886281

Репутация: 929


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

2Zaco

Я свой универ уже благо закончил N лет назад и уже 2 работы поменял :-)
Мне просто интересна задача

>> "сложность правда будет не просто оценить, потому что сразу сказать сколько вариантов лишних отметает одна фигура не ясно"

В том то и дело
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка 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