变量取值交换的方法:不拘一格编程序之三

简介:
不拘一格编程序之三
变量取值交换算法
作者:朱云翔
【题目】已知两变量a和b,设计一个算法,交换a与b的值。
【方法1】 最传统,最广泛,最著名的方法,增加一个变量,代码如下:
int a, b; 
int c; 
c=a; 
a=b; 
b=c;
 
【方法2】 不增加第三个变量,交换a和b的值,代码如下:
int a, b; 
a = a+b; 
b = a-b; 
a=a-b;
分析,设a和b的原始值为a,b
执行代码                    变量a       变量b
int a, b                    a           b
a=a+b                       a+b         b
b=a-b                       a+b        a+b-b=a
a=a-b                       a+b-(b)=a+b-a=b          a
【但是】 本方法只适合与整型等,而且不能太大,否则会有溢出。
【方法3】位运算
执行代码                    变量a       变量b
a=a^b;                     a^b        b
b=a^b;                     a^b        a^b^b=a
a=a^b;                     a^b^a=b    a
(异或)
【提问】我们平时都是使用方法1,方法2和方法3用的少,也知道后面两种比第1种方法少使用一个空间, 但是后面两种方法应用在什么地方呢?
【回答】:我暂时没有遇上非使用不可的地方。这里纯粹是研究研究,提供多种解题思路。


 本文转自 zhuyunxiang 51CTO博客,原文链接:http://blog.51cto.com/zhuyunxiang/130491,如需转载请自行联系原作者


相关文章
|
机器学习/深度学习 数据采集 运维
Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
Python基于孤立森林算法(IsolationForest)实现数据异常值检测项目实战
|
前端开发 JavaScript
React 配置别名 @ ( js/ts 项目中通过 webpack.config.js 配置)
React 配置别名 @ ( js/ts 项目中通过 webpack.config.js 配置)
278 0
|
资源调度 JavaScript IDE
使用Vue3+TS重构百星websocket插件(下)
使用Vue3+TS重构百星websocket插件(下)
使用Vue3+TS重构百星websocket插件(下)
|
Linux 数据可视化 开发工具
使用Orange Pi Zero做小小服务器(Netdata篇)
Netdata 是一款 Linux 性能实时监测工具.。以web的可视化方式展示系统及应用程序的实时运行状态(包括cpu、内存、硬盘输入/输出、网络等linux性能的数据)。
1246 0
|
Arthas 缓存 人工智能
JVM面试都问些啥?面试还不懂JVM性能调优,看这一篇文章就够了
昨晚,我在路口等车的时候,听到几个人在那讨论问题: “之前我用 jprofiler 监控 jvm 里的对象,当老年代满了,我手动触发一次 fgc,发现只能回收一半,再触发一次,就完全回收,这种情况正常吗?” “是不是你的应用正在执行过程中啊?” “可以考虑下 finalize,弱引用缓存等。” “那你们怎么确定 CPU 线程上下文切换消耗资源的?你们咋改进的?”
|
机器学习/深度学习 存储 传感器
【LSTM分类】基于卷积神经网络结合长短时记忆LSTM实现数据分类含Matlab源码
【LSTM分类】基于卷积神经网络结合长短时记忆LSTM实现数据分类含Matlab源码
|
Linux Perl
linux 命令 查看日志 排序分组计数
统计日志文件中IP个数
1112 0
|
Java Spring
SPEL语言-Spring Expression Language
Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts 2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等,并且能与Spring功能完美整合,比如能用来配置bean定义。
1193 0
|
7天前
|
人工智能 运维 安全