Задача
|
|
F1XER | Дата: Понедельник, 10.12.2007, 05:10 | Сообщение # 1 |
Знакомый
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Секретный замок состоит из 10 ячеек расположенных в ряд. Чтобы открыть замок необходимо поместить в ячейку число от 1 до 6. Дверь открывается в случае если в любых 3-х соседних ячейках сумма числел равно 10. Необходимо определить код замка при условии что 2 числа уже извесны.
|
|
| |
Seqular | Дата: Понедельник, 10.12.2007, 07:33 | Сообщение # 2 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| F1XER, Эммм... А что если просто пробежаться в цикле от второго до предпоследнего.. И брать на рассмотрение 3 значения: a[i-1], a[i], a[i+1]. Если два из них входят в множество ИЗВЕСТНЫХ чисел, а сумма всех трех дает 10, то это и будет кодом замка... М?
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
F1XER | Дата: Понедельник, 10.12.2007, 18:08 | Сообщение # 3 |
Знакомый
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Нет, не совсем так... Известы 2 любых числа... и программа должна подобрать все остальные: 1-ое+2-ое+3-е=10, 2-ое+3-е+4-ое=10,. . . . . . , 8-ое+9-ое+10-ое=10. Я пробовал зациклить рандомный перебор не известных от 1 до 6, но это абсурд, пока он там пожберёт все чтобы подходили... Здесь нужен какой-то иной алгоритм...
|
|
| |
Seqular | Дата: Понедельник, 10.12.2007, 20:53 | Сообщение # 4 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| F1XER, А. Кажется понял. А какие именно числа известны - не сказано? Т.е. может первое и последнее? Или два первых?
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
F1XER | Дата: Понедельник, 10.12.2007, 21:21 | Сообщение # 5 |
Знакомый
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Абсолютно любые 2 могут быть известны... Например я с сделал массив Z[I], и во время заполнения его известными числами I:=Random(6)+1 Code Program Key; Uses Crt; Var Z:Array[1..10] of Integer; A,B,I,J:Integer;
Begin ClrScr; Randomize; I:=0; Repeat Begin J:=Random(10)+1; If (I=1) And (B=J) Then J:=Random(10)+1; B:=J; A:=Random(6)+1; Z[J]:=A; I:=I+1; End; Until I=2;
Сообщение отредактировал F1XER - Понедельник, 10.12.2007, 21:24 |
|
| |
Seqular | Дата: Понедельник, 10.12.2007, 22:37 | Сообщение # 6 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Че-то мне код непонятен. Что он делает?
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
F1XER | Дата: Понедельник, 10.12.2007, 22:56 | Сообщение # 7 |
Знакомый
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Code Program Key; Uses Crt; Var Z:Array[1..10] of Integer; A,B,I,J:Integer;
Begin ClrScr; Randomize; I:=0; {счётчик присваиваем 0} Repeat Begin J:=Random(10)+1; {рандомно выбираем ячейку которая будет известна} If (I=1) And (B=J) Then J:=Random(10)+1; B:=J; {предупреждаем повторное выпадение того же самого номера ячейки} A:=Random(6)+1; {рандомно выбираем число, которое будет находить в известной ячейке} Z[J]:=A; I:=I+1; End; Until I=2; {до 2, т.к. известны могут быть только 2 ячейки} А теперь понятно?
Сообщение отредактировал F1XER - Понедельник, 10.12.2007, 22:56 |
|
| |
Seqular | Дата: Понедельник, 10.12.2007, 23:11 | Сообщение # 8 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| Типы: Code a: Array[1..10] of Byte; t: Byte; Код: Code a[Random(10)+1] := Random(6)+1; Repeat t := Random(10)+1; Until (a[t] = 0); a[t] := Random(6)+1; А так не проще ли сделать? Тогда в пустом массиве у нас будет ровно 2 ячейки, занятые чем-либо.. Code a: Array[1..10] of Byte; t: Byte;
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |
F1XER | Дата: Пятница, 14.12.2007, 04:12 | Сообщение # 9 |
Знакомый
Группа: Пользователи
Сообщений: 18
Статус: Offline
| Конечно проще Но суть не в этом... Главное теперь определить какими будут остальные ячейки исходя из условия задачи, а вот как................ Добавлено (11.12.2007, 16:45) --------------------------------------------- UP Добавлено (11.12.2007, 16:46) --------------------------------------------- UP Добавлено (13.12.2007, 21:12) --------------------------------------------- UP
|
|
| |
Seqular | Дата: Суббота, 15.12.2007, 10:05 | Сообщение # 10 |
Хранитель
Группа: Администраторы
Сообщений: 859
Статус: Offline
| F1XER, Фишка вот в чем. Идем от первого известного ко второму известному.. Первое неизвестное заполняем так, чтобы сумма была НЕ БОЛЬШЕ 7. Потом уже до предпоследнего идем по принципу 10 - а - б = с. ВОт.. Предпоследние заполняем уже с учетом последнего... Вот! Серединку заполнили.. Теперь заполняем края.. А там уже легко! Главное, чтобы сумма 7 не превышала.. Потому что ограничение на максимальное число 6, и сумма с минимальным (1) = 7. Если будет больше, то от нас в последующем может потребоваться вставить 7-ку.. а это мы не сможем сделать =)
Поддерживаю также проект сообщество молодых сисадминов
|
|
| |