Задачи на целые числа без использования цикла
Даны
два целых числа. Поменять местами их значения.
Рассмотрим
два способа обмена значений двух переменных a
и b.
1-ый способ. В
этом способе мы используем третью
вспомогательную переменную.
Представьте,
что у вас имеются два стакана; один, наполненный Фантой, другой Кока-Колой.
Требуется поменять содержимое этих
стаканов. Очевидно надо использовать дополнительный пустой стакан. Точно так же
надо поступать и с переменными:
Сначала
запоминаем a
(c:=a; в пустой стакан переливаем Фанту), затем b
переносим в a (a:=b; в освободившийся стакан переливаем Коку),
c переносим в b (b:=c; в пустой стакан
переливаем содержимое вспомогательного стакана – Фанту)
Program A1_2a;
var a,b,c:integer;
begin
readln(a,b);
c:=a; a:=b; b:=c;
writeln(a,' ',b);
readln;
end.
|
// Program
A1.2a;
#include
<iostream>
using
namespace std;
int main()
{ int a,b,c;
cin>>a>>b;
c=a; a=b; b=c;
cout << a<<"
"<<b << endl;
return 0;
}
|
2-ой способ.
В этом способе не используется дополнительная переменная. Посмотрите сначала
программу, а потом мы дадим пояснение.
Program A1_2b;
var a,b,c:integer;
begin
readln(a,b);
a:=a+b; b:=a-b; a:=a-b;
writeln(a,' ',b);
readln;
end.
|
// Program
A1.2b;
#include
<iostream>
using
namespace std;
int main()
{ int a,b,c;
cin>>a>>b;
a=a+b; b=a-b; a=a-b;
cout << a<<"
"<<b << endl;
return 0;
}
|
Пояснение. На
первый взгляд удивительно, но эти три оператора (a:=a+b; b:=a-b; a:=a-b; или a=a+b; b=a-b; a=a-b;) выполняют требуемый нам обмен.
Проверим: пусть a=5 и b=7.
Тогда после первого оператора a:=a+b; получим a=5+7=12. После второго
оператора b:=a-b; получим b=12-7=5. А после третьего оператора
a:=a-b; получим a=12-5=7. Все, обмен значениями
состоялся.
Примечание. Вообще
этот способ какой то выкрутасный. Ну, подумаешь, сократили на одну переменную.
И, кстати, даже не для всех целых переменных этот способ годится. (Кто скажет:
для каких не годится?). Но все таки красиво!
|