Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

Какой самый рациональный алгоритм решения? (Если вы сможете его н   Найти похожие ветки 

 
Gerakl   (2003-02-07 17:31) [0]

Энштейн придумал задачу в прошлом веке и полагал, что 98% жителей Земли не в
состоянии решить ее. Принадлежите ли Вы к 2 % самых умных людей планеты?
Чистая логика.Есть пять домов, каждый разного цвета.
В каждом доме живет один человек, отличающийся от соседнего по
национальности: немец, англичанин, швед, датчанин, норвежец.
Каждый пьет только один напиток, курит определенную марку сигарет и держит
определенное животное.
Никто из пяти человек не пьет одинаковые с другими напитки, не курит
одинаковые сигареты и не держит одинаковые животные.

Вопрос:Кому принадлежит аквариум с рыбками?
Подсказки:Англичанин живет в красном доме.
Швед держит собаку.
Датчанин пьет чай.
Зеленый дом стоит слева от белого.
Жилец зеленого дома пьет кофе.
Человек, который курит "Pall Mall", держит птицу.
Жилец из среденего дома пьет молоко.
Жилец из желтого дома курит "Dubnhill".
Норвежец живет в первом доме.
Курильщик "Marlboro" живет около того кто держит кошку.
Человек который держит лошадь, живет около того, кто курит "Dubhill".
Курильщик сигарет "Winfield" пьет пиво.
Норвежец живет около голубого дома.
Немец курит "Rothmans".
Курильщик "Marlboro" живет по соседству с человеком, который пьет воду.


 
Nikolay M. ©   (2003-02-07 17:47) [1]

Если вдуматься как следует (сначала лучше честно решить задачу), то ответов будет много :)
Например, что значит "соседний дом", "слева" и т.д.? Не исключено, что Эйнштейн подразумевал именно это, а не просто решить не самую сложную логическую задачку.

ПС
Я решил за 20 минут.


 
Gerakl   (2003-02-07 18:04) [2]

Подсказка:
Ответ один!
Соседний - или слева или справа!


 
Nikolay M. ©   (2003-02-07 18:09) [3]

Народ уже обсуждал. Посмотри:

http://www.softforum.ru/news.exe?utag=&group=cps.nontechnical&from_up=&from_down=&utag=&group=cps.nontechnical&xrelated=2737&cmd_related.x=112&cmd_related.y=11



 
gn ©   (2003-02-07 18:10) [4]

у немца


 
Gerakl   (2003-02-07 18:13) [5]

Решить ее не представляет трyда!
Вопрос - найти алгоритм программного решения этой задачи!
И написать, если не трyдно, ее!


 
gn ©   (2003-02-07 18:15) [6]


> Gerakl

ти что в универе задали
зачем
:-)


 
Mystic ©   (2003-02-07 18:38) [7]

> Вопрос - найти алгоритм программного решения этой задачи!

Изучай пролог!


 
uw ©   (2003-02-07 22:02) [8]

Немец из четвертого дома. Мучился больше часа. Алгоритм писать скучно.

Могу предложить еще задачку.
В одной из фирм шло сокращение. Каждому предлагалась задача. Кто не успевал решать за 20 мин, того увольняли. Вот она.
donald
+
gerald
--------
robert

Каждой букве - своя цифра. d = 5.


 
алексей008   (2003-02-07 22:55) [9]

Меня бы уволили...
До сих пор не могу решить...
Получается, что t=0 и e=0.


 
алексей008   (2003-02-07 22:57) [10]

Кстати, какая система счисления?


 
sniknik ©   (2003-02-07 23:02) [11]

да брось простая задачка, если бы фильм не отлекал раньше бы решил.

(хотя как сказать, одно дело забава другое если от этого важное чтото зависит)

решение есть. сказать?


 
sniknik ©   (2003-02-07 23:04) [12]

десятичная конечно. а разве есть другая? :-))))

не программистов же проверяли. написано просто в одной из фирм....


 
алексей008   (2003-02-07 23:07) [13]

>sniknik © (07.02.03 23:02)
>решение есть. сказать?
не, не надо... буду думать


 
Дмитрий К.К. ©   (2003-02-07 23:22) [14]

526485
197485
======
723970


 
Дмитрий К.К. ©   (2003-02-07 23:29) [15]

Сразу стало ясно, что R - нечетное число (потому что перекидывается единица).
Поэтому R либо 7, либо 9.
9 отпадает почти сразу, а 7 подходит... и т.д. и т.п.


 
алексей008   (2003-02-07 23:32) [16]

блин, а я насчет "е" сижу и туплю:-) самому смешно и обидно... чувствовать себя дауном.


 
алексей008   (2003-02-07 23:34) [17]

>Дмитрий К.К. © (07.02.03 23:29)

>Сразу стало ясно, что R - нечетное число (потому что >
>перекидывается единица).
>Поэтому R либо 7, либо 9.
>9 отпадает почти сразу, а 7 подходит... и т.д. и т.п.

да это я сразу понял.


 
sniknik ©   (2003-02-07 23:51) [18]

ну значит "e" это 9 т.к.
o
e
o

в результате та же цифра, возможно только если "е" = 0 (уже занято), или 9 с предыдушим переносом.

и т.д. вообше одно из другого так логично следует. кто придумал - гений!


 
Tux ©   (2003-02-08 00:07) [19]

А вообще забавно... Люди ведь разные, в том числе и в софтверной области. Один дока в алгоритмах, тактик, но стратег из него никакой, элементарной структуры спроектировать не может. Другой наоборот, мыслит умеет мыслить масштабно (это аналитик :-) но плавает в or|and|xor и не понимает отличий между while и repeat. Третий обладает чудовищной интуицией и из десятка вариантов развития системы выбирает максимально простой и красивый. Задачи разные - мышление разное. У меня вообще с математикой нелады :-)


 
Mihey   (2003-02-08 00:10) [20]

Так это же просто. Можно нарисовать домики, заполнить их постепенно и наконец станет ясно, чего не хватает, то есть оперировтаь будем с двумя-тремя утверждениями, а не с таким кол-вом.


 
алексей008   (2003-02-08 00:10) [21]

>sniknik © (07.02.03 23:51)
>в результате та же цифра, возможно только если "е" = 0 (уже
>занято), или 9 с предыдушим переносом.
Вот в том то и дело.
Рассмотрев "е"=9, я почему-то решил, что такого быть не может.

А вообще, мне спать надо идти. На моих часах 03.10


 
neodiX ©   (2003-02-08 00:25) [22]

блин про рыбу за 45мин решил(ну хоть решил), с ручкой на бумаге... да точно немец с 4 зеленого дома...


 
Sha ©   (2003-02-08 17:51) [23]

Сегодня утром я дал эту задачу своим детям.
Они считают, что рыбки могут быть у немца, датчанина и норвежца.
Вот некоторые из найденных ими решений :) ======================================
норвежец желтый кошка вода Dubnhill
датчанин голубой лошадь чай Marlboro
англичанин красный птица молоко PallMall
немец зеленый рыбки кофе Rothmans
швед белый собака пиво Winfield
======================================
норвежец зеленый птица кофе PallMall
немец голубой кошка вода Rothmans
англичанин красный лошадь молоко Marlboro
датчанин желтый рыбки чай Dubnhill
швед белый собака пиво Winfield
======================================
норвежец зеленый птица кофе PallMall
немец голубой рыбки вода Rothmans
англичанин красный лошадь молоко Marlboro
датчанин желтый кошка чай Dubnhill
швед белый собака пиво Winfield
======================================
норвежец зеленый птица кофе PallMall
немец голубой кошка вода Rothmans
швед белый собака молоко Marlboro
англичанин красный лошадь пиво Winfield
датчанин желтый рыбки чай Dubnhill
======================================
норвежец зеленый рыбки кофе Marlboro
немец голубой кошка вода Rothmans
швед желтый собака молоко Dubnhill
англичанин красный лошадь пиво Winfield
датчанин белый птица чай PallMall
======================================
норвежец зеленый птица кофе PallMall
немец голубой кошка вода Rothmans
швед белый собака молоко Marlboro
датчанин желтый рыбки чай Dubnhill
англичанин красный лошадь пиво Winfield
======================================
норвежец зеленый птица кофе PallMall
немец голубой рыбки вода Rothmans
швед белый собака молоко Marlboro
датчанин желтый кошка чай Dubnhill
англичанин красный лошадь пиво Winfield
======================================

Может, кто-нибудь еще найдет?

P.S. Если их решение понравилось кому-нибудь из Бойцовского клуба - кредиты перечисляйте marvin :)


 
Andrey ©   (2003-02-08 18:16) [24]

Вот блин... не решил с числами... С рыбой даже братся небуду...
Тяжело нам, таким вот...


 
uw ©   (2003-02-08 18:32) [25]

Зеленый дом слева от белого - неявно подразумевается, что эти дома - соседи. Тогда решение одлнозначно. Но формально дети правы!


 
MVovva   (2003-02-08 19:34) [26]


> uw ©

есть 150 решений


 
uw ©   (2003-02-08 19:39) [27]

>MVovva (08.02.03 19:34)

Покажи второе.


 
MVovva   (2003-02-08 19:56) [28]

Извиняюсь, ошибочка.


 
MVovva   (2003-02-08 20:04) [29]


> uw ©

Я не поставил проверку на одинаковые значения разных символов.

А так ношел только одно.


 
Sha ©   (2003-02-08 20:08) [30]

На самом деле все решения я привел выше.
Я написал небольшую прогу для проверки решений, найденных детьми :)
const
Nations: array[1..5] of string = ("норвежец","англичанин", "швед", "датчанин", "немец");
Colors : array[1..5] of string = ("красный", "зеленый", "белый", "желтый", "голубой");
Animals: array[1..5] of string = ("собака", "птица", "кошка", "лошадь", "рыбки");
Drinks : array[1..5] of string = ("чай", "кофе", "молоко", "пиво", "вода");
Smokes : array[1..5] of string = ("PallMall", "Dubnhill", "Marlboro", "Winfield", "Rothmans");

var
p: array[1..120] of string;

procedure NextPermutation(const s: string);
var
c1, c2, c3, c4: char;
i, j, k: integer;
p: pchar;
f: boolean;
begin;
i:=length(s); if i<=1 then exit;
j:=i; p:=pointer(s); c1:=(p+i-1)^;
repeat;
dec(i); c2:=c1; c1:=(p+i-1)^;
if c1<c2 then begin;
k:=i+1; f:=true;
while k<=j do begin;
c4:=(p+j-1)^;
if f and (c4>c1) then begin; (p+i-1)^:=c4; c4:=c1; f:=false; end;
(p+k-1)^:=c4;
if k=j then break;
c3:=c2; c2:=(p+k)^;
if f and (c2<c1) then begin; (p+i-1)^:=c3; c3:=c1; f:=false; end;
(p+j-1)^:=c3;
inc(k); dec(j);
end;
break;
end;
until i<=1;
end;

procedure GeneratePermutations;
var
i: integer;
begin;
p[1]:="12345";
for i:=2 to 120 do begin;
p[i]:=p[i-1];
UniqueString(p[i]);
NextPerMutation(p[i]);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
n, c, a, d, s, i: integer;
ch: char;
gf: boolean;
st: string;
label
bad;
begin;
GeneratePermutations;

for n:=1 to 120 do
if p[n,1]="1" then // норвежец = первый
for c:=1 to 120 do
if p[c,2]="5" then // голубой = второй
for d:=1 to 120 do
if p[d,3]="3" then // молоко = третий
for a:=1 to 120 do for s:=1 to 120 do begin;
for i:=1 to 5 do begin;
ch:=p[n,i];
if (ch="2") and (p[c,i]<>"1") then goto bad; // англичанин = красный
if (ch="3") and (p[a,i]<>"1") then goto bad; // швед = собака
if (ch="4") and (p[d,i]<>"1") then goto bad; // датчанин = чай
if (ch="5") and (p[s,i]<>"5") then goto bad; // немец = Rothmans
end;
for i:=1 to 5 do begin;
ch:=p[s,i];
if (ch="1") and (p[a,i]<>"2") then goto bad; // PallMall = птица
if (ch="2") then begin;
if p[c,i]<>"4" then goto bad; // Dubnhill = желтый
if (i>1) and (p[a,i-1]="4")
or (i<5) and (p[a,i+1]="4") then else goto bad; // Dubnhill +-1 = лошадь
end;
if (ch="3") then begin;
if (i>1) and (p[a,i-1]="3")
or (i<5) and (p[a,i+1]="3") then else goto bad; // Marlboro +-1 = кошка
if (i>1) and (p[d,i-1]="5")
or (i<5) and (p[d,i+1]="5") then else goto bad; // Marlboro +-1 = вода
end;
if (ch="4") and (p[d,i]<>"4") then goto bad; // Winfield = пиво
end;
gf:=false;
for i:=1 to 5 do begin;
ch:=p[c,i];
if ch="2" then begin;
gf:=true; // зеленый найден
if p[d,i]<>"2" then goto bad; // зеленый = кофе
end;
if (ch="3") and not gf then goto bad; // зеленый < белый
end;
for i:=1 to 5 do begin;
st:="";
st:=st + " " + Nations[ord(p[n,i])-ord("0")];
st:=st + " " + Colors [ord(p[c,i])-ord("0")];
st:=st + " " + Animals[ord(p[a,i])-ord("0")];
st:=st + " " + Drinks [ord(p[d,i])-ord("0")];
st:=st + " " + Smokes [ord(p[s,i])-ord("0")];
Memo1.Lines.Add(st);
end;
Memo1.Lines.Add("======================================");
bad:
end;
Memo1.Lines.Add("Готово.");
end;


 
Sha ©   (2003-02-08 20:09) [31]

На самом деле все решения я привел выше.
Я написал небольшую прогу для проверки решений, найденных моими детьми :)
const
Nations: array[1..5] of string = ("норвежец","англичанин", "швед", "датчанин", "немец");
Colors : array[1..5] of string = ("красный", "зеленый", "белый", "желтый", "голубой");
Animals: array[1..5] of string = ("собака", "птица", "кошка", "лошадь", "рыбки");
Drinks : array[1..5] of string = ("чай", "кофе", "молоко", "пиво", "вода");
Smokes : array[1..5] of string = ("PallMall", "Dubnhill", "Marlboro", "Winfield", "Rothmans");

var
p: array[1..120] of string;

procedure NextPermutation(const s: string);
var
c1, c2, c3, c4: char;
i, j, k: integer;
p: pchar;
f: boolean;
begin;
i:=length(s); if i<=1 then exit;
j:=i; p:=pointer(s); c1:=(p+i-1)^;
repeat;
dec(i); c2:=c1; c1:=(p+i-1)^;
if c1<c2 then begin;
k:=i+1; f:=true;
while k<=j do begin;
c4:=(p+j-1)^;
if f and (c4>c1) then begin; (p+i-1)^:=c4; c4:=c1; f:=false; end;
(p+k-1)^:=c4;
if k=j then break;
c3:=c2; c2:=(p+k)^;
if f and (c2<c1) then begin; (p+i-1)^:=c3; c3:=c1; f:=false; end;
(p+j-1)^:=c3;
inc(k); dec(j);
end;
break;
end;
until i<=1;
end;

procedure GeneratePermutations;
var
i: integer;
begin;
p[1]:="12345";
for i:=2 to 120 do begin;
p[i]:=p[i-1];
UniqueString(p[i]);
NextPerMutation(p[i]);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
n, c, a, d, s, i: integer;
ch: char;
gf: boolean;
st: string;
label
bad;
begin;
GeneratePermutations;

for n:=1 to 120 do
if p[n,1]="1" then // норвежец = первый
for c:=1 to 120 do
if p[c,2]="5" then // голубой = второй
for d:=1 to 120 do
if p[d,3]="3" then // молоко = третий
for a:=1 to 120 do for s:=1 to 120 do begin;
for i:=1 to 5 do begin;
ch:=p[n,i];
if (ch="2") and (p[c,i]<>"1") then goto bad; // англичанин = красный
if (ch="3") and (p[a,i]<>"1") then goto bad; // швед = собака
if (ch="4") and (p[d,i]<>"1") then goto bad; // датчанин = чай
if (ch="5") and (p[s,i]<>"5") then goto bad; // немец = Rothmans
end;
for i:=1 to 5 do begin;
ch:=p[s,i];
if (ch="1") and (p[a,i]<>"2") then goto bad; // PallMall = птица
if (ch="2") then begin;
if p[c,i]<>"4" then goto bad; // Dubnhill = желтый
if (i>1) and (p[a,i-1]="4")
or (i<5) and (p[a,i+1]="4") then else goto bad; // Dubnhill +-1 = лошадь
end;
if (ch="3") then begin;
if (i>1) and (p[a,i-1]="3")
or (i<5) and (p[a,i+1]="3") then else goto bad; // Marlboro +-1 = кошка
if (i>1) and (p[d,i-1]="5")
or (i<5) and (p[d,i+1]="5") then else goto bad; // Marlboro +-1 = вода
end;
if (ch="4") and (p[d,i]<>"4") then goto bad; // Winfield = пиво
end;
gf:=false;
for i:=1 to 5 do begin;
ch:=p[c,i];
if ch="2" then begin;
gf:=true; // зеленый найден
if p[d,i]<>"2" then goto bad; // зеленый = кофе
end;
if (ch="3") and not gf then goto bad; // зеленый < белый
end;
for i:=1 to 5 do begin;
st:="";
st:=st + " " + Nations[ord(p[n,i])-ord("0")];
st:=st + " " + Colors [ord(p[c,i])-ord("0")];
st:=st + " " + Animals[ord(p[a,i])-ord("0")];
st:=st + " " + Drinks [ord(p[d,i])-ord("0")];
st:=st + " " + Smokes [ord(p[s,i])-ord("0")];
Memo1.Lines.Add(st);
end;
Memo1.Lines.Add("======================================");
bad:
end;
Memo1.Lines.Add("Готово.");
end;


 
Andrey ©   (2003-02-08 20:11) [32]

Вот уж точно человеку делать нечего :)


 
Sha ©   (2003-02-08 20:12) [33]

Sorry. Эксплорер глючит.


 
uw ©   (2003-02-08 21:49) [34]

>Sha © (08.02.03 20:09)

Nach treasury!


 
Sha ©   (2003-02-08 22:14) [35]

>uw © (08.02.03 21:49)
Not at all.



Страницы: 1 вся ветка

Текущий архив: 2003.02.24;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.013 c
1-75874
Kair
2003-02-13 20:27
2003.02.24
ListBox & Hint


8-76035
Klirik
2002-11-08 17:11
2003.02.24
Сохранение в формат фотошопа


1-75984
Junk
2003-02-12 10:34
2003.02.24
ListView


1-75893
wdr
2003-02-13 05:56
2003.02.24
Exel


1-75963
Qual
2003-02-11 14:44
2003.02.24
Клавиатура