Задачи на целые числа без использования цикла
Даны два целых числа. Поменять местами их значения.
Рассмотрим два способа обмена значений двух переменных 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. Все, обмен значениями состоялся.
Примечание. Вообще этот способ какой то выкрутасный. Ну, подумаешь, сократили на одну переменную. И, кстати, даже не для всех целых переменных этот способ годится. (Кто скажет: для каких не годится?). Но все таки красиво!