| maksimla |
9.10.2009 19:40
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
Задачка
Дано 100 карточек выложенные в строку. На каждой карточке написано по одной цифре. Можно или нельзя выложить так карточки чтобы не одно число не было на том же самом месте? Надо найдите хотя бы один вариант расположения карточек. Напишите решения идеи описание. Объясните задачку и как пишется эта идея. Или тут надо алгоритм написать? И еще будит ли перестановка засчитана если поменяем два одинаковых числа местами? Моя идея Проверить на одинаковые цифры рядом и их переместить одну на -1 позицию и потом заного проверить если есть еще такие числа и потом все числа сдвинуть влево на одну позицию. -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
![]() ![]() |
| maksimla |
10.10.2009 12:34
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
Например, если данная строка карточек выглядит так (используем цифры от 0 до 5): 2 4 3 3 2 0 2 5 0 - то массив Cards получится (после работы этой строки) таким: 2 0 3 2 1 1 Это значит, что у нас есть 2 нуля, ноль единиц, 3 двойки, 2 тройки, 1 четверка и 1 пятерка. Этот массив мы будем использовать при переборе различных комбинаций. мне всё ровно не доходит как так получилось из этого Inc(Cards[Ini[i]]); все числа 2 0 3 2 1 1 можете объяснить ? а так если смотреть то дальше идет так Arrange(1) обращаемся к функции Код k:=1 i:=0 if (0<>2)and(2>0) then begin Res[k]:=0; Dec(Cards[i]); 1 0 3 2 11 f:=(k=n)or Arrange(k+1); k:=2 if (0<>4)and(1>0) then begin Res[k]:=0; Dec(Cards[i]); 0 0 3 2 11 f:=(k=n)or Arrange(k+1); k:=3 if (0<>3)and(0>0) then begin inc(i) i=1 if (1<>3)and(0>0) then begin inc(i) i=2 if (2<>3)and(3>0) then begin Res[k]:=2; Dec(Cards[i]); 0 0 2 2 11 f:=(k=n)or Arrange(k+1); k:=4 if (0<>3)and(0>0) then begin inc(i) i=1 if (1<>3)and(0>0) then begin inc(i) i=2 if (2<>3)and(2>0) then begin Res[k]:=2; Dec(Cards[i]); 0 0 1 2 1 1 f:=(k=n)or Arrange(k+1); k:=5 if (0<>2)and(0>0) then begin inc(i) i=1 if (1<>2)and(0>0) then begin inc(i) i=2 if (2<>2)and(1>0) then begin inc(i) i=3 if (3<>2)and(2>0) then begin Res[k]:=3; Dec(Cards[i]); 0 0 1 1 1 1 f:=(k=n)or Arrange(k+1); k:=6 if (0<>0)and(0>0) then begin inc(i) i=1 if (1<>0)and(0>0) then begin inc(i) i=2 if (2<>0)and(1>0) then begin Res[k]:=2; Dec(Cards[i]); 0 0 0 1 1 1 f:=(k=n)or Arrange(k+1); k:=7 if (0<>2)and(0>0) then begin inc(i) i=1 if (1<>2)and(0>0) then begin inc(i) i=2 if (2<>2)and(0>0) then begin inc(i) i=3 if (3<>2)and(1>0) then begin Res[k]:=3; Dec(Cards[i]); 0 0 0 0 1 1 f:=(k=n)or Arrange(k+1); k:=8 if (0<>5)and(0>0) then begin inc(i) i=1 if (1<>5)and(0>0) then begin inc(i) i=2 if (2<>5)and(0>0) then begin inc(i) i=3 if (3<>5)and(0>0) then begin inc(i) i=4 if (4<>5)and(1>0) then begin Res[k]:=4; Dec(Cards[i]); 0 0 0 0 0 1 f:=(k=n)or Arrange(k+1); k:=9; сейчас все будут гнать к i:=5 и тогда if (5<>0)and(1>0) then begin Res[k]:=5; Dec(Cards[i]); 0 0 0 0 0 0 f:=(9=9); Inc(Cards[i]) 0 0 0 0 0 1 вот это не очень понел я until f or(i>m); Arrange:= f и все конец запишут наверное так 0 0 2 2 3 2 3 4 5 Inc(Cards[i]) я вот этого не понял и как еще этот текст скрыть Сообщение отредактировано: maksimla - 10.10.2009 12:40 -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
| Lapp |
10.10.2009 12:51
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
мне всё ровно не доходит как так получилось из этого Inc(Cards[Ini[i]]); все числа 2 0 3 2 1 1 можете объяснить ? Конечно, пожалуйста.Я повторю тут исходную строку: 2 4 3 3 2 0 2 5 0 Сколько в ней нулей? Два. Значит, Cards[0] должно быть равно 2. Сколько в ней единиц? Ноль, то есть их нет. Значит, Cards[1] должно быть равно 0. Сколько в ней двоек? Три. Значит, Cards[2] должно быть равно 3. Сколько в ней троек? Две. Значит, Cards[3] должно быть равно 2. Сколько в ней четверок? Одна. Значит, Cards[4] должно быть равно 1. Сколько в ней пятерок? Одна. Значит, Cards[5] должно быть равно 1. Таким образом, мы получаем, что массив Cards должен быть таким: 2 0 3 2 1 1 Теперь разберемся, как это осуществить в программе. Я процитирую строку из программы: for i:= 1 to n do Inc(Cards[Ini[i]]); В этом цикле мы проходим по всей входной строке и при каждой втрече цифры увеличиваем нужный элемент массива Cards. Таким образом, в массиве Cards получаются общие количества каждой цифры поэлементно. Стало понятнее? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
maksimla надо написать Идея описания решение 9.10.2009 19:40
TarasBer Типа того.
Будет нагляднее, если исходный массив о... 9.10.2009 20:34
Lapp Рекурсия? :)
const
n=100; {number of cards}
... 10.10.2009 5:28
maksimla Надо только идею описания решения мне написать. Ес... 10.10.2009 9:43
Lapp А тут на сколько увеличивается и что Inc(Cards[Ini... 10.10.2009 10:28
maksimla все ровно не очень понятно я так понимаю так
бере... 10.10.2009 14:10
maksimla Как идею решение надо написать программу или алгор... 10.10.2009 19:01
Lapp как то так странно я вы до этого недодумалсябыЭто ... 11.10.2009 4:09
maksimla ясно спасибо все понял я 11.10.2009 9:05![]() ![]() |
|
Текстовая версия | 13.12.2025 15:03 |