Помощь - Поиск - Пользователи - Календарь
Полная версия: задачка на лампочки, имеющих два состояния
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
metallic
Имеется n>= ламп. расположенных в ряд, каждая из которых может быть в одном или двух состояний -"вкл" или "выкл". Каждую секунду лампы одновременно меняют своё состояние по правилам если лампа и ее соседи (для первой и последней лампы - один сосед, для остальных - два) находятся в одинаковом состоянии, то она принимает состояние "выкл", иначе она принимает состояние "вкл''. В начальном положении все лампы находятся в состоянии "выкл", кроме самой левой лампы, имеющей состояние ''вкл'' . Экспериментально найдите ( не менее 5), для каких n все все лампы будут в состоянии '' выкл''.
Lapp
М
Просьба привести название темы в соответствие с Правилами Форума (ссылка вверху страницы), п.4. В противном случае тема будет закрыта.

Lapp
Ответ к твоей задаче такой: гаснут те наборы, в которых число ламп есть степень двойки - остальные продолжают мигать бесконечно.

Решение есть. Готов обсуждать его после исправления названия темы..
Lapp
Спасибо за название.

Как я уже сказал, если тебе интересно решение - давай пообсуждаем.
У тебя по поводу него какие мысли/заделы есть?
metallic
Я решил ее , вот только не знаю правильно ли:
Program A1;
var i,k,n:integer;
BEGIN
writeln ('vvedite koli4estvo eksperimentov');
readln(k);
k:=k+1;
n:=0;
for i:=2 to k do
begin
if i mod 3=0 then
begin
n:=1;
writeln ('pri n=',n,' vse lampo4ki pogasnyt');
end;
end;
writeln ('pri n=2 vse lampo4ki pogasnyt');
readln;
END.
Lapp
Цитата(metallic @ 23.11.2008 15:24) *
Я решил ее , вот только не знаю правильно ли:

Что-то я совсем не врубаюсь.. Поясни, при чем тут остаток по модулю 3?
metallic
Все догадался)), вроде так:
Program Lamp;
var i,k:integer;
n:real;
BEGIN
writeln ('vvedite kol-vo opitov');
readln (k);
n:=2;
writeln ('vse lampi pogasnyt pri n=2');
for i:= 1 to k do
begin
n:=n+exp(i*ln(2));
writeln ('vse lampi pogasnyt pri n=',n);
end;
readln
END.
Lapp
Что-то я вообще ничего не понимаю.. blink.gif Ты же просто считаешь степени двойки:
Цитата(metallic @ 23.11.2008 16:52) *

n:=n+exp(i*ln(2));
- да и все! Но ПОЧЕМУ? Как ты это вывел? Ты что ли основываешься на моем посте? Так это я тебе уже результат сказал. А ты просто делаешь прогу, чтоб она выводила то, что надо - и неважно, что внутри? так, что ли?
Ведь нужно-то ПРОВОДИТЬ эксперименты. Так? Или я чего-то не понимаю?
Отвечай поскорее, я собираюсь спать. Если нужен код - дам.
Lapp
Ладно, бери код и разбирайся в нем.
Успехов!
const
m=26; // максимальное число ламп

var
n: integer;
L,L1: array [1..m] of boolean;

function On: boolean;
var
i: integer;
b: boolean;
begin
b:=false;
for i:=1 to n do begin
b:=b or L[i];
if b then Break
end;
On:=b
end;

procedure Show;
var
i: integer;
begin
for i:=1 to n do if L[i] then Write('0') else Write('-');
ReadLn
end;


var
i: integer;
j: LongInt;

begin
for n:=2 to m do begin
Write('Trying n=',n,' .. ');
L[1]:=true;
for i:=2 to n do L[i]:=false;
j:=0;
while On and(j<1 shl n) do begin
for i:=1 to n do
L1[i]:=(i>1)and(L[i] xor L[i-1])or(i<n)and(L[i] xor L[i+1]);
L:=L1;
Inc(j);
// Show;
end;
if On then WriteLn('Some On') else WriteLn('All Off');
end
end.

Если найдутся ошибки - не обессудь..
На вопросы, я думаю, тебе тут ответят. А я - спать..
metallic
спасибо большое smile.gif
volvo
Цитата
Если найдутся ошибки - не обессудь..
Найдутся, найдутся smile.gif Причем трудноуловимые для новичка: если эту программу откомпилировать 16-битным компилятором и запустить, то получим не совсем то, чего ожидаем:
Цитата
Trying n=2 .. All Off
Trying n=3 .. Some On
Trying n=4 .. All Off
Trying n=5 .. Some On
Trying n=6 .. Some On
Trying n=7 .. Some On
Trying n=8 .. All Off
Trying n=9 .. Some On
Trying n=10 .. Some On
Trying n=11 .. Some On
Trying n=12 .. Some On
Trying n=13 .. Some On
Trying n=14 .. Some On
Trying n=15 .. Some On
Trying n=16 .. Some On
Trying n=17 .. Some On
Trying n=18 .. Some On
Trying n=19 .. Some On
Trying n=20 .. Some On
Trying n=21 .. Some On
Trying n=22 .. Some On
Trying n=23 .. Some On
Trying n=24 .. Some On
Trying n=25 .. Some On
Trying n=26 .. Some On
, потому как Integer-а не хватает для произведения операции 1 shl 16, надо сделать N "длинным целым" (LongInt)
Lapp
Цитата(volvo @ 24.11.2008 13:22) *
Integer-а не хватает для произведения операции 1 shl 16, надо сделать N "длинным целым" (LongInt)

.. что, я, ессно, и сделал... но отправил, видимо, старую версию..
Спасибо, volvo
proscar order best on line pharm
Diamox Buy No Prescription
where can i buy plaquenil withou
Ibuprofen Amoxicillin
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.