AtCoder Beginner Contest 161 A ABCスワップ変数交換/追加/減算交換/排他的OR交換

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);
}

 

元の記事を660件公開 562 件を賞賛 48万回の閲覧

おすすめ

転載: blog.csdn.net/mrcrack/article/details/105321838