编程中如何不使用中间变量的情况下将两个变量的值进行交换
一点回忆
如何将两个变量的值互相交换?看到这个问题,不由得勾起了高中时代的一些记忆。那时正值高一,好像正在学习着数学课本上的一些程序框图的课程,当时的数学老师以这道题为例进行课程的讲解,讲解过后,还自己编写了一段代码,给我们演示了下。至于老师当时使用的编程语言、编程工具、编程环境,等等这些,都不清楚,因为当时计算机对于我们来说,还是很神秘莫测的。给我留下较深印象的是老师对这道题解法的幽默风趣的讲解:
现在有两个变量,a和b,a是墨水桶,装着墨水,而b是辣椒桶,装着辣椒。交换a和b的值,相当于墨水桶要换成装辣椒,而辣椒桶要换成装墨水。这样处理:
1. 引入一个新的变量,即拿来一个新的桶,将原先墨水桶的墨水倒到新桶,此时墨水桶空出来了
2. 将辣椒桶的辣椒倒到墨水桶,墨水桶成功换成装辣椒,此时辣椒桶空出来了
3. 将新桶的墨水倒到辣椒桶,辣椒桶成功换成装墨水。
故事继续,后来接触了编程,在入门时,又碰到了这个问题,只不过,这一次需要自己动手编写代码来解决了。
使用中间变量交换两个变量
这是比较普遍的算法。
// 采用Java语言相应实现
public static void main(String[] args) {int a = 11;int b = 22;System.out.println("交换前:变量a=" + a + ",变量b=" + b);// 引入中间变量,交换两个变量a、b的值int t;t = b;b = a;a = t;System.out.println("交换后:变量a=" + a + ",变量b=" + b);
}
输出结果如下图所示:
不使用中间变量交换两个变量
最初看到“不使用中间变量交换两个变量”时,还是挺不解。很好奇不使用中间变量时,会怎么解决,最后看了实现方案,还是有点感叹方案的精巧的。有的方案采用简单的加减法运算达到交换的目的,有的方案则采用异或运算达到。
1. 采用加减法运算交换两个变量
// 采用Java语言相应实现
public static void main(String[] args) {int a = 11;int b = 22;System.out.println("交换前:变量a=" + a + ",变量b=" + b);// 不使用中间变量,使用加减法运算,交换两个变量a、b的值a = a + b;b = a - b; // b = (a + b) - b ==> b = a, 即a交换到了ba = a - b; // a = (a + b) - a ==> a = b, 即b交换到了aSystem.out.println("交换后:变量a=" + a + ",变量b=" + b);
}
输出结果如下图所示:
2. 采用异或运算交换两个变量
// 采用Java语言相应实现
public static void main(String[] args) {int a = 11;int b = 22;System.out.println("交换前:变量a=" + a + ",变量b=" + b);// 不使用中间变量,使用异或运算,交换两个变量a、b的值a = a ^ b;b = a ^ b;a = a ^ b;System.out.println("交换后:变量a=" + a + ",变量b=" + b);
}
输出结果如下图所示:
参考资料
- 不使用任何中间变量如何将a、b的值进行交换
编程中如何不使用中间变量的情况下将两个变量的值进行交换相关推荐
- 如何在不引入第三个变量的情况下互换两个变量的值
如何在不引入第三个变量的情况下互换两个变量的值 算术运算 异或运算 解构 总结 例:x = 4:y = 5.如何在不引入第三个变量的情况下互换x与y的值? 算术运算 第一种方法是加法. x = x + ...
- 在不借助第三方变量情况下实现两个变量的交换(借助于异或运算)
下面首先来看一个问题. 假设存在两个int型变量a和b,那么如何实现两个变量值的交换呢. 通常我们的做法,也是最容易想到的做法就是通过定义一个第三方变量,然后借助于该变量来实现变量值的交换. 方法一( ...
- python两个变量互换值编程_在编程中实现两个变量的值交换
在最初接触编程的时候,使用的是C语言,在交换两个变量的值的时候需要引入第三个变量作为temp值.如下面第①种方法. 方法①:加入第三个temp变量来实现交换 我们以C语言为例,也是最常见的方法 voi ...
- WPS中如何分节,复杂情况下如何插入页码
原文出处:http://hi.baidu.com/%C6%AE%B6%F9pianzi/blog/item/dd5dde16b4ce124f21a4e9fd.html/cmtid/c2c840c4ac ...
- 用html5交换两个变量的值,Python判断两个对象相等的原理 python交换两个变量的值为什么不用中间变量...
python语言设计一个类代表花,其中含2个对象属性,2class flower: def __init__ (self, name, shape): self.name = name self.sh ...
- python不用中间变量交换值_不使用中间变量,交换int型的 a, b两个变量的值。
不使用中间变量,交换int型的 a, b两个变量的值. 代码如下: //by ppchen var a = 10, b = 2; a = a + b; b = a - b; a = a - b; 代码 ...
- 在不借助中间变量的前提下,交换两个变量的值
借助中间变量,可以很方便的交换两个变量的值.如果不借助中间变量,同样可以达到交换变量的目的. 数值相加减进行交换 int a = 10; int b = 12; a = b - a; //a = 2, ...
- hover在两种情况下的两种用法
:hover在鼠标移到链接上时添加的特殊样式. 提示: :hover 选择器器可用于所有元素,不仅是链接. 提示: :link 选择器设置了未访问过的页面链接样式, :visited 选择器设置访问过 ...
- PHP中不用第三个变量交换两个变量的值
相信大家在PHP面试或者学习中经常会遇到这个问题就是"不用第三个变量来交换两个变量的值",今天正对这个问题来讨论一下: 第一种方法:首先会想到的 这种方法简单可行,顺利的交换了两个 ...
- C语言中的关键字,变量的定义,变量的命名规则,交换两个变量的值,驼峰命名法【 C语言变量名命名法则】
C语言结构 C语言中的关键字 变量 变量的定义 变量的命名规则 交换两个变量的值 驼峰命名法 C语言结构 上图中我们可以看到最外层是程序,内部是所有的构成,我们从最里面开始说明. 当我们用计算机语言来 ...
最新文章
- php-nginx超时时间过短导致的post失败
- J2ME程序开发新手入门九大要点
- Sharepoint
- ebc是什么意思_UEFI+GPT和Legacy+MBR两种模式安装的系统有什么区别
- win11 WSL Ubuntu更换为清华源
- Quartz框架中的Scheduler
- Linux下C编程实战
- java多线程传值覆盖_Java 多线程传值的四种方法
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第24篇]描述一个二进制m组的滑动窗口指数算法
- python try语句相关(try/except/else/finally)
- sql语句 isnull(列名,'')='' /STUFF的意思
- 如何判断一个大佬值不值得跟随
- 蜻蜓fm收音机电脑版_追寻逝去的时光:Tivoli Audio M1BT收音机蓝牙音箱体验
- 雷林鹏分享:MySQL DELETE 语句
- 微信昵称包含emoji表情,保存异常
- 2017.5.20欢(bei)乐(ju)赛解题报告
- zlib再windows下的编译
- python怎么导入背景_Pycharm主题设置以及导入方式
- sqlserver 执行计划
- iTEXT常用属性设置