
В написании выражения ((((1?2)?3)?4)?5?)?6 вместо каждого знака ? вставить знак одного из 4-х арифметическихвыражений : +, -, *, / так, чтобы результат вычислений равнялся 35 (при делении дробная часть отбрасывается) Достаточно найти одно решение.
Мое решение оказалосб менше и понятней для меня чем решение приведенное в книге, но может кто придложет еще более комактный вариант ;)
uses crt;
var
a_1,a_2 : integer;
function calculate(a,b : integer; ch : char) : integer;
begin
case ch of
'+' : calculate := a + b;
'-' : calculate := a - b;
'*' : calculate := a * b;
'/' : calculate := a div b;
end;
end;
var
c : array[1..4] of char = ('+','-','*','/');
c1, c2, c3, c4, c5 : byte;
begin
clrscr;
for c1 := 1 to 4 do
for c2 := 1 to 4 do
for c3 := 1 to 4 do
for c4 := 1 to 4 do
for c5 := 1 to 4 do begin
a_1 := 1;
a_2 := 2;
a_1 := calculate(a_1,a_2,c[c1]);
inc(a_2);
a_1 := calculate(a_1,a_2,c[c2]);
inc(a_2);
a_1 := calculate(a_1,a_2,c[c3]);
inc(a_2);
a_1 := calculate(a_1,a_2,c[c4]);
inc(a_2);
a_1 := calculate(a_1,a_2,c[c5]);
if a_1 = 35 then begin
writeln(c[c1],' ',c[c2],' ',c[c3],' ',c[c4],' ',c[c5]);
halt;
end;
end;
end.
чувствую что можно это все еще сократить, но пока не получается ..
буду выклывадывать интересные задачки, если етсь желающие мозги размять
