Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на деревья, Может кто знает как решить это? 
:(
    Опции темы
klerk
Дата 8.12.2004, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.12.2004

Репутация: нет
Всего: нет



Имеется п черных и белых карточек, сложенных в стопку. Карточки раскладываются на
стол в одну линию следующим образом: первая кладется на стол, вторая - под низ стопки,
третья - на стол, четвертая - под низ стопки и т. д., пока все карточки не будут выложены
на стол. Каким должно быть исходное расположение карточек в стопке, чтобы разложенные на
столе карточки чередовались по цвету: белая, черная, белая, черная и т. д.?

Заранее благодарен.
Алексей


PM MAIL   Вверх
Guest
Дата 8.12.2004, 21:46 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











сначала причём тут дерево?........
.........а почему n у тебя не задано, такой фокус связан вообще с картёжными картами, вообщем для 4 карт белых и чёрных расклад такой: ббчббччч.......
  Вверх
markowww
Дата 9.12.2004, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 27.2.2003
Где: В Вологде-где

Репутация: нет
Всего: нет



Не знаю, причем здесь деревья, но без них можно вот так:
Код

program koloda;

{$APPTYPE CONSOLE}

uses
 SysUtils;

const n = 5;

function power(a, b: integer): integer; //функция для вычисления степени
var i, s: integer;
begin
  if b = 0 then s:= 1
  else begin
     s:= a;
     for i:= 1 to b - 1 do s:= s * a;
  end;
  power:= s;
end;

var ar1, ar2: array [1..2 * n] of byte; //массив ar1 хранит последовательность выкладывания карт
   i, j, k: integer;                                //массив ar2 хранит цвет карт
begin
  k:= 1;  //инициализация счетчиков
  i:= 1;
  while (2 * n div power(2, i - 1) <> 0) do begin //перебор всех этапов
     for j:= 1 to 2 * n do
        if (j mod power(2, i - 1) = 0) and (j mod power(2, i) <> 0) then begin {проверка а выкладывается ли карта с номером j на данном этапе}
           ar1[k]:= j;
           k:= k + 1;
        end;
     i:= i + 1; //следующий этап
  end;
  for j:= 1 to 2 * n do
     if j mod 2 = 0 then ar2[ar1[j]]:=0 else ar2[ar1[j]]:=1; //сопоставление номеров; 0, 1 - цвета
end.


Алгоритм таков: пронумеруем карты в колоде числами от 1 до 2n. Будем считать, что каждую вторую карту мы кладем под низ не основной колоды, а под низ отдельной колоды. Тогда весь процесс выкладывания карт на стол разобьется на несколько этапов: каждый этап заканчивается, когда заканчиваются карты в основной колоде. В этот момент берем за основную нашу новую колоду. При этом номера карт НЕ МЕНЯЮТСЯ. Заметим, что на первом этапе на стол будут выложены карты с номерами 1, 3, 5, 7, .... На втором 2, 6, 10... На третьем 4, 12, 20... и т.д
Закономерность такова: на проходе с номером k на стол выкладываются те и только те карты, номера которых делятся на 2 в степени (k - 1) и не делятся на 2 в степени k. Таким образом можно получить последовательность номеров карт в порядке их выкладывания на стол. На пример, при n = 5 получим (1, 3, 5, 7, 9), (2, 6, 10), (4), (8) в скобках указаны номера карт, выкладываемых в одном этапе. А по условию, первая выложенная на стол карта - белая (или черная, разницы нет), вторая - черная, третья белая и т.д. Осталось просто сопоставить номера карт с их цветом:

1, 3, 5, 7, 9, 2, 6, 10, 4, 8
Б Ч Б Ч Б Ч Б Ч Б Ч

Это значит, что карта за номером 1 - белая, за номером 3 - черная, за номером 5 - белая и т.д
PM MAIL   Вверх
Гость_klerk
Дата 9.12.2004, 12:45 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











но очень нужно с деревьями...
Может кто знает?
  Вверх
Vladimir13
Дата 13.12.2004, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 8.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 1



ну например, белая - это узел дерева, а черная - подузел. Программно задавать соответствующим фишкам значение узла или подузла.
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.