一道C++题目,求高手!!!
#include
using namespace std;
int main()
{
int x;//x存放打破那个人的编号,x=1是A,x=2是B,x=3是C,x=4是D
for(x = 1;x <= 4;x ++)
if(((x != 1) + (x == 2) + (x != 1) + (x != 2) <= 3))//x!=1代表A没有打破,x==2代表B打破的,x!=2代表B没有打破 最后<=3表示至少有一个人说谎 .如果最后==3代表只有一个人说谎
cout << char(64+x) << "打破的!" << endl;
return 0;
}
我要说的是,你这道题你可以分析下,根据你给的条件找不出来谁打破的。
华为的一道面试题目(C/C++初学者进):
二楼的做法虽然高明,但当数据过大时可能会溢出.
Auto_eth0的第一种做法,即按位取异或的方法,才是最好的。
第一次取异或,ab相同的位变为0,不同的变为1,并存入a中。b再与其取异或时,如果此时a的某一位为1,则表示原来的a,这一位和b不同,和现在的a取异或后b在该位的值正好变的与原来相反;如果a的某位为0,则表示原来的a,这一位和b相同,和现在的a取异或后b在该位的值正好不变。
这样做不仅能交换整形变量,其他任何形式的变量都能交换,厉害!!!