Есть три целочисленных переменных (a,b,c). Надо вывести на экран ту, значение которой минимально.
Фишка в том, что использовать циклы и условные операторы нельзя.
Формально ограничений на язык не накладывается, но обещали, что средств Паскаля хватит.
Главное - конструктивная идея.
Была мысль про исключения...
Ну допустим при a<b ln(a-b) будет фигней, а при a>b прекрасно обработается. Но этот вариант был принят условно. Говорят, существует решение совсем без условий....
У вас тут с мыслями порядок... может, придумается что......
мисс_граффити,
для 2-х чисел задача решается так:
varЛениво сейчас то же самое добавлять еще раз... Просто присвой промежуточный результат в какую-то переменную, и проделай то же самое с ней и "С"...
a, b: integer;
begin
a := 10; b := 12;
writeln('min(a, b) = ',
(((((a-b)/abs(a-b)))*(-1)+abs(((a-b)/abs(a-b))))/2)*a +
(((((b-a)/abs(b-a)))*(-1)+abs(((b-a)/abs(b-a))))/2)*b
);
end.
P.S. Кстати, упрощаем выражение:
Прикрепленные файлы
ver_02.pas ( 111 байт )
Кол-во скачиваний: 237
супер!
с такой скоростью решил или знал?
Вот мое решение (для трех чисел). В нем нет условных операторов, хотя есть сами условия. Впрочем, их тоже можно избежать..
const
a:integer=2;
b:integer=300;
c:integer=-10;
var
d:array[false..true]of integer;
begin
d[false]:=a;
d[true]:=b;
d[false]:=d[a>b];
d[true]:=c;
d[false]:=d[d[false]>c];
WriteLn(d[false]);
end.
lapp, тоже красиво.
я уточню, можно ли с условиями с таком виде. думаю, что да: ведь никаких ветвлений нет, а ограничения были именно на них.
-----------
если интересно, могу иногда подобные задачи кидать.
то есть если вам самим в удовольствие, а не как 1725-й раз писать "пользуйтесь поиском".