Вторник, 07.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Задача
F1XERДата: Понедельник, 10.12.2007, 05:10 | Сообщение # 1
Знакомый
Группа: Пользователи
Сообщений: 18
Репутация: 0
Замечания: 0%
Статус: Offline
Секретный замок состоит из 10 ячеек расположенных в ряд.
Чтобы открыть замок необходимо поместить в ячейку число от 1 до 6.
Дверь открывается в случае если в любых 3-х соседних ячейках сумма числел равно 10.
Необходимо определить код замка при условии что 2 числа уже извесны.
 
SeqularДата: Понедельник, 10.12.2007, 07:33 | Сообщение # 2
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
F1XER, Эммм... А что если просто пробежаться в цикле от второго до предпоследнего.. И брать на рассмотрение 3 значения:
a[i-1], a[i], a[i+1]. Если два из них входят в множество ИЗВЕСТНЫХ чисел, а сумма всех трех дает 10, то это и будет кодом замка... М?


Поддерживаю также проект сообщество молодых сисадминов
 
F1XERДата: Понедельник, 10.12.2007, 18:08 | Сообщение # 3
Знакомый
Группа: Пользователи
Сообщений: 18
Репутация: 0
Замечания: 0%
Статус: Offline
Нет, не совсем так... Известы 2 любых числа... и программа должна подобрать все остальные: 1-ое+2-ое+3-е=10, 2-ое+3-е+4-ое=10,. . . . . . , 8-ое+9-ое+10-ое=10. Я пробовал зациклить рандомный перебор не известных от 1 до 6, но это абсурд, пока он там пожберёт все чтобы подходили... Здесь нужен какой-то иной алгоритм...
 
SeqularДата: Понедельник, 10.12.2007, 20:53 | Сообщение # 4
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
F1XER, А. Кажется понял. А какие именно числа известны - не сказано? Т.е. может первое и последнее? Или два первых?

Поддерживаю также проект сообщество молодых сисадминов
 
F1XERДата: Понедельник, 10.12.2007, 21:21 | Сообщение # 5
Знакомый
Группа: Пользователи
Сообщений: 18
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 35
Статус: Offline
Че-то мне код непонятен. Что он делает? smile

Поддерживаю также проект сообщество молодых сисадминов
 
F1XERДата: Понедельник, 10.12.2007, 22:56 | Сообщение # 7
Знакомый
Группа: Пользователи
Сообщений: 18
Репутация: 0
Замечания: 0%
Статус: 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
Репутация: 35
Статус: 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
Репутация: 0
Замечания: 0%
Статус: Offline
Конечно проще smile
Но суть не в этом... Главное теперь определить какими будут остальные ячейки исходя из условия задачи, а вот как................ happy

Добавлено (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
Репутация: 35
Статус: Offline
F1XER, Фишка вот в чем. Идем от первого известного ко второму известному.. Первое неизвестное заполняем так, чтобы сумма была НЕ БОЛЬШЕ 7. Потом уже до предпоследнего идем по принципу 10 - а - б = с. ВОт.. Предпоследние заполняем уже с учетом последнего... Вот! Серединку заполнили.. Теперь заполняем края.. А там уже легко! Главное, чтобы сумма 7 не превышала.. Потому что ограничение на максимальное число 6, и сумма с минимальным (1) = 7. Если будет больше, то от нас в последующем может потребоваться вставить 7-ку.. а это мы не сможем сделать =)

Поддерживаю также проект сообщество молодых сисадминов
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;