首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

诺基亚的校园招聘应届生:怎么不使用“中间变量”交换2个数

2012-08-08 
诺基亚的校园招聘应届生:如何不使用“中间变量”交换2个数?RT[解决办法]百度:如何不使用“中间变量”交换2个数

诺基亚的校园招聘应届生:如何不使用“中间变量”交换2个数?
RT

[解决办法]
百度:
如何不使用“中间变量”交换2个数

这个题面试中出现的概率挺高的
[解决办法]
好像是用 ^ 吧,去百度吧
[解决办法]

int a,b
a=a+b
b=a-b
a=a-b
这样子?
[解决办法]
这样的会溢出的…
把加号换成 ^
[解决办法]
a = a^b;
b = b^a;
a = a^b;
[解决办法]

探讨

怎么连诺基亚也问这种问题?

[解决办法]
++ 但可能性不好 也就是考考思维
探讨
a = a^b;
b = b^a;
a = a^b;

[解决办法]
可读性
[解决办法]
一是性能问题
二是可能溢出
[解决办法]
异或 也可以加减法交换。
[解决办法]
探讨
引用:
这样的会溢出的…
把加号换成 ^

^ 是什么符号啊 能说明下嘛

[解决办法]
还有分可接吧
[解决办法]
探讨
瞧大学生那副德行,校园招聘其实都在防水,除非你不想招人了

[解决办法]
探讨
引用:
这样的会溢出的…
把加号换成 ^

^ 是什么符号啊 能说明下嘛

[解决办法]
反正不用中间变量一点儿都不提倡

只作为考试用和一个知识点
[解决办法]
探讨

引用:
瞧大学生那副德行,校园招聘其实都在防水,除非你不想招人了

这些所谓“省空间”的方法其实既不省空间也不省时间,更关键的是,没看过这道题的人很难快速想出答案……

[解决办法]
这个是老题了啊,可读性不高+效率低下,完全不知道这种题目想考什么......
[解决办法]
如果是整型的话 用异或最快(可读性不好) 别的话 估计要用到新出的右引用
C/C++ code
int a = 123;int b = 456;a ^= b;b ^= a;a ^= b;
[解决办法]
C/C++ code
#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){    int a=-1;    int b=3;    /*a|=b;//算法1(不太管用)    b|=a;    a|=b;*/    /*a=a^b;算法2    b=a^b;    a=a^b;*/    /*a^=b^=a^=b;算法3    NULL;    NULL;*/    cout<<a<<" "<<b<<endl;    system("pause");    return 0;}
[解决办法]
测试环境:cygwin g++ 4.3.4 x86,编译选项 g++ -O2 -c。

测试代码1(验证第一点):
C/C++ code
void swap (int &a, int &b){    int t = a;    a = b;    b = t;} 

热点排行