关于交换两个数的思考
2010-09-14 21:47
309 查看
或许大家都有这类似的经历,在最初学习某种编程语言的时候,也就是解决一些简单的问题,当然有很多事数学问题,比方说交换两个数,我相信这个简单的题目,大家都做过的!但是,有好多人都只是解决问题,很少思考的,至少我就是这样的!最近,在CSDN论坛里,看到了有人讨论这个问题!反思了这个问题。
在学C语言的时候,我也做过这个问题,记得当时我们老师还举了个例子来说明这个问题,给你一瓶醋,一瓶酱油,你怎么把他们换过来(醋瓶装酱油,酱油瓶装醋),这时候,有很多同学(包括我),想法是再找另外一只瓶子,然后就可以完成这个交换过程!对应到我们的程序中,就是定义第三个变量,然后来完成交换!下面是用c实现这个过程的代码。
后来自学Java的时候,又用Java代码实现的这个过程,但是采用的思想并没有变化。下面就是交换问题的Java版实现。
这样写完后,当时感觉自己听厉害的!可以解决问题了,再没有想过这个问题的另外的解法!知道今天,在CSDN论坛里,看到了有人在讨论这个问题的另外一中实现方法,即只要两个变量,就可以完成交换!还记得,上学的时候,曾经有一次,一个同学说,这个问题的这种实现方法,当初我就拿醋和酱油的例子,跟他争!看来,当初是我错了!下面就说说这种问题的两个另类解法。
不错,这两种方法都很好!但是有人,或许会认为,当a和b相加的和超出了int的范围时,可能会出错,认真思考以后发现,这种担心是多余的!原因就要涉及到计算机中是怎么进行加减运算的,有兴趣了可以自己去研究!
嘿嘿,看看人家思考的好处!我们也要学会思考,只有这样,才能有更大的进步!
在学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的范围时,可能会出错,认真思考以后发现,这种担心是多余的!原因就要涉及到计算机中是怎么进行加减运算的,有兴趣了可以自己去研究!
嘿嘿,看看人家思考的好处!我们也要学会思考,只有这样,才能有更大的进步!
相关文章推荐
- C语言利用指针在函数中交换两个数的思考
- 关于数据交换的思考
- js中关于交换两变量值得四中方法的思考
- 位运算和关于两个数交换的多种方法
- 指针初学笔记(两个数交换的函数----关于指针的理解)
- 关于c语言中交换两个数的方法
- 关于两数交换三种方法的思考
- 关于使用异或完成两个数的交换
- 位运算和关于两个数交换的多种方法
- 关于C语言中交换两个数的代码探讨
- 关于C语言交换两个数的实现方法以及个人心得
- 关于两个数的交换
- 关于涉及链表和数组中信息交换的一些思考
- [JAVA] 一条新闻引出的思考,关于不用中间变量交换两个变量的值
- 位运算和关于两个数交换的多种方法
- 关于个人博客中友情链接交换的若干思考
- 关于两个数交换
- 关于Rich Client设计的思考
- 关于原型链和继承问题的思考:为什么不能直接把父类的prototype赋值给子类的prototype
- 关于LVS+Nginx为什么会被同时使用的思考