Вот есть ребус. Кому интересно - решите и ответьте, пожалуйста на 2 вопроса: первый в опросе, а второй: Ваш ответ . Нажмите для просмотра прикрепленного файла И не забудьте поделиться идеей решения таких штучек)
Ответ и откуда взят ребус(Показать/Скрыть)
Ответ, если не ошибаюсь=2. Ребус - один из вопросов в тесте IQ, который расчитан на 30 минут
Lapp
5.12.2009 10:30
Я почему-то с детства не люблю такие ребусы.. Поэтому решаю (если нужно) только программно. На составление проги ушло минут 10. Еще минут 5 на отладку (пару буковок попутал). В сумме около 17-18 мин. Я отметил "до 30", но это, конечно, нечестно - на тесте компа нет, наверное (либо нет компилятора)).
тут сама прога(Показать/Скрыть)
var a,b,c,d,e,f,g,h,j: integer;
begin for a:=0 to 9 do for b:=0 to 9 do if a<>b then for c:=0 to 9 do if (a<>c)and(b<>c) then for d:=0 to 9 do if (a<>d)and(b<>d)and(c<>d) then for e:=0 to 9 do if (a<>e)and(b<>e)and(c<>e)and(d<>e) then for f:=0 to 9 do if (a<>f)and(b<>f)and(c<>f)and(d<>f)and(e<>f) then for g:=1 to 9 do if (a<>g)and(b<>g)and(c<>g)and(d<>g)and(e<>g)and(f<>g) then for h:=0 to 9 do if (a<>h)and(b<>h)and(c<>h)and(d<>h)and(e<>h)and(f<>h)and(g<>h) then for j:=1 to 9 do if (a<>j)and(b<>j)and(c<>j)and(d<>j)and(e<>j)and(f<>j)and(g<>j)and(h<>j) then if ( ( 100*d+10*g+j + 100*j+10*a+e + 100*b+10*h+f = 1100*d+10*a+b ) and (f*c div j = g*10+a) and (f*c mod j = 0) and (a mod g = 0) ) then WriteLn(a,' ',g,' ',a div g,' ',a,'/',g,' ', d,g,j,'+',j,a,e,'+',b,h,f,'=',d,d,a,b,' ',f,'*',c,'/',j,'=',g,a); WriteLn('done') end.
Думал, что потом все-таки порешаю так, умом )). Но не учел, что, когда увидел ответ, честно решать невозможно . Так что - ууупс!..
P.S.
еще один вариант - с множествами(Показать/Скрыть)
var a,b,c,d,e,f,g,h,j: integer; s: set of byte;
begin s:=[]; for a:=0 to 9 do begin Include(s,a); for b:=0 to 9 do if not (b in s) then begin Include(s,b); for c:=0 to 9 do if not (c in s) then begin Include(s,c); for d:=0 to 9 do if not (d in s) then begin Include(s,d); for e:=0 to 9 do if not (e in s) then begin Include(s,e); for f:=0 to 9 do if not (f in s) then begin Include(s,f); for g:=1 to 9 do if not (g in s) then begin Include(s,g); for h:=0 to 9 do if not (h in s) then begin Include(s,h); for j:=1 to 9 do if not (j in s) then begin if ( ( 100*d+10*g+j + 100*j+10*a+e + 100*b+10*h+f = 1100*d+10*a+b ) and (f*c div j = g*10+a) and (f*c mod j = 0) and (a mod g = 0) ) then WriteLn(a,' ',g,' ',a div g,' ',a,'/',g,' ', d,g,j,'+',j,a,e,'+',b,h,f,'=',d,d,a,b,' ',f,'*',c,'/',j,'=',g,a); end; Exclude(s,h) end; Exclude(s,g) end; Exclude(s,f) end; Exclude(s,e) end; Exclude(s,d) end; Exclude(s,c) end; Exclude(s,b) end; Exclude(s,a) end; WriteLn('done') end.
Вячеслав Л.
5.12.2009 18:44
Я решить не смог : посмотрел программу под заголовкам "тут сама прога". Попытался ее переделать, чтобы мне понятнее было. Переделал, прога работает, но выдает "ответ 1". Посмотрите, пожалуста, что я переделал не так (на будущее)...
Спойлер(Показать/Скрыть)
var a,b,c,d,e,f,g,h,j: integer;
begin for a:=0 to 9 do for b:=0 to 9 do if a<>b then for c:=0 to 9 do if (a<>c)and(b<>c) then for d:=0 to 9 do if (a<>d)and(b<>d)and(c<>d) then for e:=0 to 9 do if (a<>e)and(b<>e)and(c<>e)and(d<>e) then for f:=0 to 9 do if (a<>f)and(b<>f)and(c<>f)and(d<>f)and(e<>f) then for g:=1 to 9 do if (a<>g)and(b<>g)and(c<>g)and(d<>g)and(e<>g)and(f<>g) then for h:=0 to 9 do if (a<>h)and(b<>h)and(c<>h)and(d<>h)and(e<>h)and(f<>h)and(g<>h) then for j:=1 to 9 do if (a<>j)and(b<>j)and(c<>j)and(d<>j)and(e<>j)and(f<>j)and(g<>j)and(h<>j) then if (100*d+10*g+j + 100*j+10*a+e + 100*b+10*h+f = 1100*d+10*a+b) and (f*c div j = g*10+a) and (f*c mod j = 0) and (a mod g = 0) then WriteLn(d,g,j,'+',j,a,e,'+',b,h,f,'=',d,d,a,b); WriteLn('otvet: ',a/g); end.
volvo
5.12.2009 19:07
Цитата
Посмотрите, пожалуста, что я переделал не так (на будущее)...
Все так, только ты не учел, что значения A и G продолжают изменяться в цикле, и только после того, как все циклы закончатся (программа ведь отформатирована так, что это видно сразу), выполняется строка: WriteLn('otvet: ',a/g);. А теперь подумай, чему в это время будут равны A и G? Тебе надо печатать ответ сразу же, как было напечатано выражение, то есть, обернуть эти 2 WriteLn-а в begin/end, тогда получишь то, что хочешь...
Вячеслав Л.
5.12.2009 19:21
Спасибо, не заметил, что цикл еще не окончился.
andriano
5.12.2009 20:50
26 минут. Ответ совпал с тем, что в исходном сообщении. Когда получил ответ, понял, что массу времени потерял зря. Как это обычно и бывает. Идея, что для решения данной задачи можно использовать компьютер, естественно, возникла, но я ее отбросил, т.к. посчитал неинтересной. Пользовался бумажкой.
sheka
5.12.2009 21:42
Цитата
"еще один вариант - с множествами"
Lapp , мое решение один в один с Вашим, только include/Exclude не пользовался, и времени тоже 15 минут ушло andriano, каким образом??? Все равно не уложился
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.