1. Можно осуществить обмен через операции сложение и вычитания, произведения и деления.
Например:
x:=x+y
y:=x-y
x:=x-y
2. Из недостатков вижу только то, что происходя вычисления а не только присваивания.
3. Если используется алгоритм со сложением и вычитанием, то его можно применять для вещественных чисел.
// PascalABC.NET 3.1, сборка 1218 от 12.04.2016
begin
var a:=ArrRandom(ReadInteger('n='),10,99);
a.Println.Sorted.Println;
Writeln('Количество разных чисел ',a.Distinct.Count)
end.
<u><em>Тестовое решение:</em></u>
n= 20
60 33 12 47 79 81 33 26 73 98 82 81 71 70 96 48 13 66 29 85
12 13 26 29 33 33 47 48 60 66 70 71 73 79 81 81 82 85 96 98
Количество разных чисел 18
Для решения этой задачи будут необходимы весы с двумя чашами.
Раскладываем 9 монет на 3 стопки по 3 монеты и начинаем взвешивание.
Алгоритм определения фальшивой монеты состоит из 2 шагов:
1. Взвешиваем любые 2 стопки по 3 монеты. Если весы в равновесии - то фальшивая монета в оставшейся стопке, если какая-то чаша перевешивает, значит фальшивая монета в той стопке, которая легче.
2. Из стопки из 3 монет, в той которая находится фальшивая, берем любые 2 и взвешиваем. Если весы в равновесии - фальшивая та, которая осталась, если одна из чаш перевешивает, значит фальшивая та, которая легче.
<em>// PascalABC.NET 3.2, сборка 1353 от 27.11.2016</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
Writeln(ReadlnString('>').ToWords()[1].Length)
end.
<u>Пример</u>
> А роза упала на лапу Азора
4