Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Rinat74s
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 1
1

Кто сможет объяснить алгоритм?

17.08.2013, 00:39. Просмотров 619. Ответов 1
Метки нет (Все метки)

Здравствуйте, если не сложно можете объяснить решение задачи, условие такое:
>>Работать дилером в казино занятие довольно скучное и однообразное. Сидишь и мешаешь карты... Что тут может >>быть интересного? Дабы не умереть со скуки, дилеры придумывают различные способы перетасовки карт.
>>Например, они придумали такой способ перетасовки. С колодой проделывают следующую последовательность >>действий: вытаскивают первую сверху карту и кладут вниз колоды, затем в полученной колоде вытаскивают >>вторую сверху карту и тоже кладут вниз, потом то же самое делают с третьей... и т.д. до предпоследней карты, >>которую также кладут вниз колоды. Такой способ перетасовки они назвали особым.
>>После долгого рабочего дня дилеры собираются, чтобы отдохнуть. Обычно они играют в карты, поскольку ни во что >>другое играть не умеют. На деньги дилерам играть не интересно и поэтому, как правило, проигравший должен >>перетасовать колоду из N карт особым способом некоторое количество раз так, чтобы карты в колоде оказались >>точно в таком же порядке, что и до перетасовок.
>>Ваша задача определить, сколько секунд придется тасовать колоду проигравшему дилеру, если на каждую >>перетасовку он тратит ровно одну секунду.
>>Формат входных данных
>>В первой строке входного файла находится целое число N (2 ≤ N ≤ 1000) – количество карт в колоде.
>>Формат выходных данных
>>Выведите минимальное количество секунд, которое потребуется дилеру.

Как условие понял я..
Допустим у нас есть колода из 7 карт, т.е 1 2 3 4 5 6 7 мы берем из нее первую карту и кидаем ее в конец >>
2 3 4 5 6 7 1, затем в полученной колоде берем 2 сверху и так до предпоследней карты, т.е ход вот такой:
[1] 2 3 4 5 6 7
2 [3] 4 5 6 7 1
2 4 [5] 6 7 1 3
2 4 6 [7] 1 3 5
2 4 6 1 [3] 5 7
2 4 6 1 5 [7] 3
2 4 6 1 5 3 [7]
[4] 6 1 5 7 3 2
В обще перетасовываем колоду N раз пока не получится исходная. У меня на перетасовку колоды из 7 карт ушло 35 секунд, НО!
К задаче есть примеры, и там для колоды из 7 карт тратится 6 секунд!.
Прошу помощи у людей, которые поняли условие задачи сказать в чем я так сильно ошибся.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2013, 00:39
Ответы с готовыми решениями:

PortW, кто сможет объяснить?
Есть программа написанная на Паскале, мне её нужно перевести в плюсы (С++)....

интересный алгоритм вычисления квадратных корней. кто сможет реализовать задание в программу?
ЦИТАТА : "Также существует интересный алгоритм вычисления квадратных корней....

кто сможет написать програму?
програма яка реалізує всі режими роботи з текстовими файлами в Паскаль

Кто сможет найти ошибку??
текст програмы: PROGRAM Primer_7; var BALL: Integer; BEGIN Write...

массив матрица кто сможет на паскале?
дана матрица B (m,n) (m=3, n=4).найти её минимальный элемент и указать номер...

1
Puporev
Модератор
54680 / 42101 / 29069
Регистрация: 18.05.2008
Сообщений: 99,353
17.08.2013, 07:52 2
Лучший ответ Сообщение было отмечено как решение

Решение

1 перетасовка это выполнение этого условия
Цитата Сообщение от Rinat74s Посмотреть сообщение
вытаскивают первую сверху карту и кладут вниз колоды, затем в полученной колоде вытаскивают >>вторую сверху карту и тоже кладут вниз, потом то же самое делают с третьей... и т.д. до предпоследней карты, >>которую также кладут вниз колоды.
На нее тратится 1 секунда.
Значит при семи картах вероятно нужно 6 таких перетасовок.
Вот пример программы(ваша не обязательно должна быть такая, даже скорее всего не такая).
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
uses crt;
const nmax=1000;
type mas=array[1..nmax] of integer;
function srav(a,b:mas;n:integer):boolean;
var i:integer;
    f:boolean;
begin
f:=true;
i:=1;
while(i<=n)and f do
if b[i]<>a[i] then f:=false
else inc(i);
srav:=f
end;
procedure peretasovka(var a:mas;n:integer);
var i,j,x:integer;
begin
for i:=1 to n-1 do
 begin
  x:=a[i];
  for j:=i to n-1 do
  a[j]:=a[j+1];
  a[n]:=x;
 end;
end;
var n,i,k:integer;
    a,a1,b:mas;
begin
clrscr;
n:=7;
for i:=1 to n do
a[i]:=i;
a1:=a;
k:=0;
repeat
peretasovka(a,n);
k:=k+1;
until srav(a,a1,n);
write('k=',k);
readln
end.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2013, 07:52

Кто сможет, пришлите решение 3 номеров=)
к сожалению, я не разбераюсь в паскале. буду признательна, если получу ...

кто сможет поможет 30.01.13 часа в 4 с паскалем?
Кто сможет помочь 30.01.13 с паскалем? Нужна помощь в решении задачи. Пишите в...

не могу написать 4 программы одного типа. кто сможет?
1) Измените значение переменной A$ так, чтобы определялось слово &quot;вертикаль&quot; и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru