您的位置:首页 > 其它

关于交换两个数的思考

2010-09-14 21:47 309 查看
或许大家都有这类似的经历,在最初学习某种编程语言的时候,也就是解决一些简单的问题,当然有很多事数学问题,比方说交换两个数,我相信这个简单的题目,大家都做过的!但是,有好多人都只是解决问题,很少思考的,至少我就是这样的!最近,在CSDN论坛里,看到了有人讨论这个问题!反思了这个问题。
在学C语言的时候,我也做过这个问题,记得当时我们老师还举了个例子来说明这个问题,给你一瓶醋,一瓶酱油,你怎么把他们换过来(醋瓶装酱油,酱油瓶装醋),这时候,有很多同学(包括我),想法是再找另外一只瓶子,然后就可以完成这个交换过程!对应到我们的程序中,就是定义第三个变量,然后来完成交换!下面是用c实现这个过程的代码。

#include<stdio.h>

//简单的交换两个数
void change(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
printf("after change data:%d,%d/n",a,b);
}

void main()
{
int a,b;
printf("please input two int num:/n");
scanf("%d%d",&a,&b);
change(a,b);
}


后来自学Java的时候,又用Java代码实现的这个过程,但是采用的思想并没有变化。下面就是交换问题的Java版实现。

import java.util.Scanner;

public class Change {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入两个整数:");
int a = input.nextInt();
int b = input.nextInt();
change(a,b);
}

private static void change(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
System.out.println("交换后的数据:" + a + "," + b);
}
}


这样写完后,当时感觉自己听厉害的!可以解决问题了,再没有想过这个问题的另外的解法!知道今天,在CSDN论坛里,看到了有人在讨论这个问题的另外一中实现方法,即只要两个变量,就可以完成交换!还记得,上学的时候,曾经有一次,一个同学说,这个问题的这种实现方法,当初我就拿醋和酱油的例子,跟他争!看来,当初是我错了!下面就说说这种问题的两个另类解法。

private static void change(int a, int b) {
//这种实现里面,只用这两个变量自身进行加减去实现。
a = a + b;
b = a - b;
a = a - b;
System.out.println("交换后的数据:" + a + "," + b);
}
private static void change(int a, int b) {
//这种实现里面,只用这两个变量自身异//或去实现。
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("交换后的数据:" + a + "," + b);
}


不错,这两种方法都很好!但是有人,或许会认为,当a和b相加的和超出了int的范围时,可能会出错,认真思考以后发现,这种担心是多余的!原因就要涉及到计算机中是怎么进行加减运算的,有兴趣了可以自己去研究!
嘿嘿,看看人家思考的好处!我们也要学会思考,只有这样,才能有更大的进步!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: