去年偶然的情况下算了一次命,算命的说我对计算机和电那一方面有天赋,现在就想说一句,大哥你是认真的不,到现在我是真没发现我的天赋在哪,我只能相信勤能补拙和功夫不怕有心人了好不。
今天接着学习《算法入门经典》这本书,看到了交换变量那道题我......哭笑不得。
我知道交换变量有三种方法,(1)引入第三变量;(2)加减法;(3)异或法。
代码如下:
(1)引入第三变量:
int main()
{
int a, b, t;
scanf("%d%d", &a, &b);
printf("a=%d b=%d\n", a, b);
t = a;
a = b;
b = t;
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
验证:a = 5, b = 9;
则 t = 5;
a = 9;
b = 5;
(2)加减法 :
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
printf(“a=%d b=%d \n”, a, b);
a = a+b;
b = a-b; //b = a+b-b=a
a = a-b; //a = a+b-a=b
printf(“a=%d b=%d”, a, b);
system(“pause”);
return 0;
}
验证:a = 5, b = 9;
则 a = 5+9 = 14;
b = 14-9 = 5;
a = 14-5 = 9;
(3)异或法 :
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b); //假设 a = 5, b = 9,那么 a : 0101 b: 1001
printf(“a=%d b=%d \n”, a, b);
a = a^b;
b = a^b
// b = 1100^1001 = 0101 = 5
a = a^b
// a = 1100^0101 = 1001 = 9
printf("a=%d b=%d", a, b);
system("pause");
return 0;
}
验证: 假设 a = 5, b = 9,那么 a : 0101 b: 1001;
则 a = 0101^1001 = 1100;
b = 1100^1001 = 0101 = 5;
a = 1100^0101 = 1001 = 9 ;
注意:用加减法计算数据可能会一处,它的适用范围很窄。
书上给了我第四种方法:
(4)
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf(“a=%d b=%d \n”, a, b);
printf(“a=%d b=%d\n”, b, a);
system(“pause”);
return 0;
}
就是一个简单的输入输出,真的是简单的我想哭,我为什么就没想到呢,所以,算命的,你说我的天赋该不会是修电脑吧,好吧,我觉得修电脑我更不行了,我连内存条什么的也是近一两年才知道的人指望我去给人家修电脑,指不定还要给人家赔钱。我是没天赋了,现在就想多看书多敲代码验证书上说的,多练习,多学多思考,见得多了总能想到解决办法的。