【各种方法】交换两个数的值的9种方法!(持续更新)

Description
输入两个正整数A和B,使用赋值语句交换A、B的值(使A的值等于B,B的值等于A)。
Input
输入两个正整数
Output
输出交换后的值
Sample Input
1 2
Sample Output
2 1

就是这题。

怎么样?很简单吧?

进入正题

1.首先是最简单的办法:

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
	int a, b, c;
	
	cin >> a >> b;
	
	c = a;
	a = b;
	b = c;
	
	cout << a << " " << b; 
	
	return 0;
}

2.使用函数:

#include <iostream>

using namespace std;

void doit(int &a, int &b)
{
	int c;
	
	c = a;
	a = b;
	b = c;
	
	return;
}

int main(int argc, char** argv)
{
	int a, b;
	
	cin >> a >> b;
	
	doit(a, b);
	
	cout << a << " " << b; 
	
	return 0;
}

3.还有一种指针:

#include <iostream>

using namespace std;

void doit(int *a, int *b)
{
	int c;
	
	c = (*a);
	(*a) = (*b);
	(*b) = c;
	
	return;
}

int main(int argc, char** argv)
{
	int a, b;
	
	cin >> a >> b;
	
	doit(&a, &b);
	
	cout << a << " " << b; 
	
	return 0;
}

4.swap()是个好东西:

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
	int a, b;
	
	cin >> a >> b;
	
	swap(a, b);
	
	cout << a << " " << b; 
	
	return 0;
}

5.投机取巧:

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
	int a, b;
	
	cin >> a >> b;
	
	cout << b << " " << a; 
	
	return 0;
}

6.大材小用:

#include<cstddef>
#include<limits>
#include<climits>
#include<cfloat>
#include<typeinfo>
#include<exception>
#include<ciso646>
#include<cstdarg>
#include<csetjmp>
#include<csignal>
#include<iostream>
#include<iomanip>
#include<ios>
#include<istream>
#include<ostream>
#include<sstream>
#include<fstream>
#include<iosfwd>
#include<streambuf>
#include<cstdio>
#include<cwchar>
#include<stdexcept>
#include<cassert>
#include<cerrno>
#include<utility>
#include<functional>
#include<memory>
#include<ctime>
#include<string>
#include<cctype>
#include<cwctype>
#include<cstring>
#include<cwchar>
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<bitset>  
#include<iterator>
#include<algorithm>
#include<ciso646>
#include<complex>
#include<valarray>
#include<numeric>
#include<cmath>
#include<cstdlib>
#include<locale>
#include<clocale>
#include<windows.h>
#include<string>

#define SPACE 0
#define BARRIER 1
#define DIAMOND 2
#define CHECKPOINT 3
#define LINED 4
#define END 5
#define NOTSTART 0
#define RUNNING 1
#define DEAD 2
#define WIN 3
#define UP 0
#define RIGHT 1
#define DOWN 2
#define LEFT 3
#define __DL_SIZE 10001
#define standarddir 0,1,0,1

using namespace std;

class dl
{
	public:
		int dmap[__DL_SIZE][__DL_SIZE];
		int __stadus;
		int linex;
		int liney;
		int dir;
		bool usedir[4];
		int dirs[2];
		int diamonds;
		int checkpointx;
		int checkpointy;
		
		void clear(void);
		void setdir(bool __up, bool __down, bool __left, bool __right);
		void move(void);
		int stadus(void);
		void start(int __x, int __y);
		void setmap(int __n, int __m);
		void turn(void);
};

void dl::clear(void)
{
	memset(dmap, 0, sizeof (dmap));
	memset(usedir, 0, sizeof (usedir));
	memset(dirs, 0, sizeof (dirs));
	dir = UP;
	checkpointx = 0;
	checkpointy = 0;
	diamonds = 0;
	__stadus = NOTSTART;
	
	return;
}

void dl::setdir(bool __up, bool __down, bool __left, bool __right)
{
	int k = 0;
	
	memset(usedir, 0, sizeof (usedir));
	if (__up)
	{
		usedir[UP] = true;
		if (k < 2)
		{
			dirs[k++] = UP;
		}
	}
	if (__down)
	{
		usedir[DOWN] = true;
		if (k < 2)
		{
			dirs[k++] = DOWN;
		}
	}
	if (__left)
	{
		usedir[LEFT] = true;
		if (k < 2)
		{
			dirs[k++] = LEFT;
		}
	}
	if (__right)
	{
		usedir[RIGHT] = true;
		if (k < 2)
		{
			dirs[k++] = RIGHT;
		}
	}
	
	dir = dirs[0];
	
	return;
}

void dl::move(void)
{
	int temp;
	switch (dir)
	{
		case UP:
			linex--;
			break;
		case DOWN:
			linex++;
			break;
		case LEFT:
			liney--;
			break;
		case RIGHT:
			liney++;
			break;
	}
	temp = dmap[linex][liney];
	if (temp == BARRIER)
	{
		__stadus = DEAD;
		return;
	}
	if (temp == DIAMOND)
	{
		diamonds++;
	}
	if (temp == CHECKPOINT)
	{
		checkpointx = linex;
		checkpointy = liney;
	}
	if (temp == END)
	{
		__stadus = WIN;
	}
	dmap[linex][liney] = LINED;
	
	return;
}

int dl::stadus(void)
{
	return __stadus;
}

void dl::start(int __x, int __y)
{
	diamonds = 0;
	checkpointx = __x;
	checkpointy = __y;
	linex = __x;
	liney = __y;
	__stadus = RUNNING;
	dir = dirs[0];
	dmap[__x][__y] = LINED;
	
	return;
}

void dl::setmap(int __n, int __m)
{
	int i, j;
	
	for (i = 0; i < __n; i++)
	{
		for (j = 0; j < __m; j++)
		{
			std::cin >> dmap[i][j];
		}
	}
	
	return;
}

void dl::turn(void)
{
	if ((dir != dirs[0]) && (dir != dirs[1]))
	{
		return;
	}
	if (dir == dirs[0])
	{
		dir = dirs[1];
		return;
	}
	dir = dirs[0];
	
	return;
}

dl d;

int main(int argc, char** argv)
{
	cin >> d.linex >> d.liney;
	
	swap(d.linex, d.liney);
	
	cout << d.linex << " " << d.liney;
	
	return 0;
}

7.宏操作:

#include <iostream>

#define doit(a,b) {int c; c = a; a = b; b = c;}

using namespace std;

int main(int argc, char** argv)
{
	int a, b;
	
	cin >> a >> b;
	
	doit(a, b);
	
	cout << a << " " << b;
	
	return 0;
}

8.异或大法好(老师说的,我还没有弄明白【捂脸】):

#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
	int a, b;
	
	cin >> a >> b;
	
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	
	cout << a << " " << b;
	
	return 0;
}

9.五马分尸:

#include <iostream>

#define c9(_,__,___,____,_____,______,_______,________,_________) _##__##___##____##_____##______##_______##________##_________
#define c6(_,__,___,____,_____,______) _##__##___##____##_____##______
#define c5(_,__,___,____,_____) _##__##___##____##_____
#define c4(_,__,___,____) _##__##___##____
#define c3(_,__,___) _##__##___
#define c2(_,__) _##__

c2(c, 5(u, s, i, n, g)) c2(c, 9(n, a, m, e, s, p, a, c, e)) c2(c, 3(s, t, d));

c2(c, 3(i, n, t)) c2(c, 4(m, a, i, n))(c2(c, 3(i, n, t)) c2(c, 4(a, r, g, c)), c2(c, 4(c, h, a, r))** c2(c, 4(a, r, g, v)))
{
	c2(c, 3(i, n, t)) a, b;
	
	c2(c, 3(c, i, n)) >> a >> b;
	
	c2(c, 4(s, w, a, p) (a, b));
	
	c2(c, 4(c, o, u, t)) << a << " " << b;
	
	c2(c, 6(r, e, t, u, r, n)) 0;
}

猜你喜欢

转载自blog.csdn.net/drtlstf/article/details/80257195