![]() |
![]() |
maksimla |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
Задачка
Дано 100 карточек выложенные в строку. На каждой карточке написано по одной цифре. Можно или нельзя выложить так карточки чтобы не одно число не было на том же самом месте? Надо найдите хотя бы один вариант расположения карточек. Напишите решения идеи описание. Объясните задачку и как пишется эта идея. Или тут надо алгоритм написать? И еще будит ли перестановка засчитана если поменяем два одинаковых числа местами? Моя идея Проверить на одинаковые цифры рядом и их переместить одну на -1 позицию и потом заного проверить если есть еще такие числа и потом все числа сдвинуть влево на одну позицию. -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
![]() ![]() |
maksimla |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
Например, если данная строка карточек выглядит так (используем цифры от 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 |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
мне всё ровно не доходит как так получилось из этого 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 получаются общие количества каждой цифры поэлементно. Стало понятнее? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 2:28 |