AtCoder Beginner Contest 161 出場者の 数は9927人 で、コンテスト開始5分後にすべての質問をご覧ください
AtCoder Beginner Contest 161 A ABCスワップ変数交換/追加/減算交換/排他的OR交換
一般的なカタログについては、https://blog.csdn.net/mrcrack/article/details/104454762を参照してください
オンライン評価用アドレスhttps://atcoder.jp/contests/abc161/tasks/abc161_a
方法1:変数交換
交換に中間変数を使用します。
#include <stdio.h>
int main(){
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
t=x,x=y,y=t;
t=x,x=z,z=t;
printf("%d %d %d\n",x,y,z);
}
方法2:加算と減算
加算と減算を使用した交換
派生は次のとおりです。
x + yy = x 、x + yx = y
なお、値が比較的大きい場合、加算計算の結果がオーバーフローする場合があります。
#include <stdio.h>
int main(){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
x=x+y,y=x-y,x=x-y;
x=x+z,z=x-z,x=x-z;
printf("%d %d %d\n",x,y,z);
}
方法3:XOR交換
派生は次のとおりです。
x ^ y ^ y = x ^(y ^ y)= x ^ 0 = x、x ^ y ^ x = x ^ x ^ y =(x ^ x)^ y = 0 ^ y = y
XOR演算を使用した交換
#include <stdio.h>
int main(){
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
x=x^y,y=x^y,x=x^y;
x=x^z,z=x^z,x=x^z;
printf("%d %d %d\n",x,y,z);
}