`
slmi
  • 浏览: 32564 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

不使用第三个变量的情况下交换两个整型变量的值

    博客分类:
  • JAVA
阅读更多
链接:http://hanghang.name/a-program-written-test.html

当时在考场上的想法就是用栈的先进后出(FILO)特性来实现,但是栈的定义实现和相关函数的定义实现上感觉写的不是很好,写的不顺畅。结束后才后知后觉的想到其实栈和相关函数的定义实现等声明一下即可,一般来说不需要写出来的,重点偏移了,浪费时间不讨好。考试后 Google 了一下,找到另外一些比较特别的解法,总结记录一下。

1、栈实现。不多解释了,栈和相关函数定义省去。

    1 int exchange(int x,int y)
    2 {
    3     stack S;
    4
    5     push(S,x);
    6     push(S,y);
    7
    8     x=pop(S);
    9     y=pop(S);
    10 }

2、算术运算。很巧的方法,比较考验算法积累。缺点是只能用于数字类型,字符串之类的就不可以了。

    //假设 x=3,y=4;
    x=x+y;//x=7
    y=x-y;//y=3
    x=x-y;//x=4
但是这样做有一个缺陷,假设它运行在vc6环境中,那么int的大小是4 Bytes,所以int变量所存放的最大值是2^31-1即2147483647,如果我们令a的值为2147483000,b的值为1000000000,那么a和b相加就越界了。
事实上,从实际的运行统计上看,我们发现要交换的两个变量,是同号的概率很大,而且,他们之间相减,越界的情况也很少,因此我们可以把上面的加减法互换,这样使得程序出错的概率减少:
int a=5,b=10;
a-=b;   //a=-5,b=10
b+=a;   //a=15,b=5
a+=b;   //a=10,b=5

又看到一篇类似的文章,但是分析的更透彻。
分享:http://hi.baidu.com/yarmu/blog/item/ddad0ef39a0b36cf0b46e00d.html
分享到:
评论

相关推荐

    C#基础每日练习2018.12.10

    要求将两个变量交换,最后输出n1为20,n2为10。扩展(*):不使用第三个变量如何交换? 2. 用方法来实现:将上题封装一个方法来做,方法有两个参数分别为num1,num2,将num1与num2交换。提示:方法有两个参数n1,n2,在...

    指针程序设计.docx

    在main函数中构造两个整型变量,通过调用swap_int函数实现这两个整型变量的数值交换,并显示交换前和交换后的数据。 【题目5-1】代码及运行结果: 【题目5-2】设数组score[]保存若干学生的某一课程的成绩,定义一个...

    c程序设计习题参考(谭浩强三版)习题参考解答

    9.1定义一个代参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 66 9.2输入两个整数,求它们相除的余数。用带参的宏来实现,编程序。 67 9.3 67 9.4给年份year定义...

    11.第十一章 指针.txt

    交换了指针变量的值,导致指针变量交换了指向。 例:交换指针变量所指向的数据的值。 #include int main() { int i1=3,i2=4,temp=0,*pi1=&i1;,*pi2=&i2; printf("i1=%d\ti2=%d\n",i1,i2); temp=*pi1; *pi1=...

    2011.模拟.java.高职

    如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡,但也可以在不借助任何其它变量的情况下完成。试填写缺失的代码。 3. 代码填空(满分3分) 许多人都曾经玩过“拍七”游戏。规则是:大家依次从1...

    Linux高级bash编程

    两个指定值之间的随机数 9-27. 使用随机数来摇一个骰子 9-28. 重新分配随机数种子 9-29. 使用awk产生伪随机数 9-30. C风格的变量处理 10-1. 循环的一个简单例子 10-2. 每个[list]元素带两个参数的for循环 10-3. ...

    Advanced Bash-Scripting Guide <>

    两个指定值之间的随机数 9-27. 使用随机数来摇一个骰子 9-28. 重新分配随机数种子 9-29. 使用awk 产生伪随机数 9-30. C 风格的变量处理 10-1. 循环的一个简单例子 10-2. 每个[list]元素带两个参数的for 循环 10-3. ...

    语言程序设计课后习题答案

    2-16 已知x、y两个变量,写一条简单的if语句,把较小的的值赋给原本值较大的变量。 解: if (x &gt; y) x = y; else // y &gt; x || y == x y = x; 2-17 修改下面这个程序中的错误,改正后它的运行结果是什么? #include ...

    华为编程开发规范与案例

    对某交换类进行计费测试,字冠011对应1号路由、1号子路由,有4个中继群11,12,13,14(都属于1#模块),前后两个群分别构成自环。其中11,13群向为出中继,12,14群向为入中继,对这四个群分别进行计费设置,对出入中继都...

    你必须知道的495个C语言问题

    它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 3.6 可是&&和||操作符呢?我看到过类似while...

    Java开发技术大全(500个源代码).

    trySwap.java 试图交换两个形参的值 useOnlyTest.java 创建多个对象,演示this的作用 useStaticBolck.java 使用静态块 useStVar.java 使用静态成员变量 第4章 示例描述:本章学习继承与多态。 absClass.java ...

    你必须知道的495个C语言问题.pdf

    它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 3.6 可是&&和||操作符呢?我看到过类似while((c ...

    《你必须知道的495个C语言问题》

    它不需要临时变量就可以交换a和b的值。 34 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副作用?就算括号不行,操作符优先级是否能够控制计算顺序呢? 35  3.6 可是&&和||操作符呢?我看到过...

    c++ 面试题 总结

    这两个好象是一样的,此时*p可以修改,而p不能修改。 (4)const char * const p 这种是地址及指向对象都不能修改。 -------------------------------------------------------------------------- 6.下面是C语言中...

    新概念C语言.李一波(带详细书签).pdf

    “新概念C语言”突破了以往任何一种语言教材的旧的模式,将教学内容分为入门篇和提高篇两个篇章。在入门篇中只引进程序设计必要的语法现象,达到快速入门。激发兴趣的目的。在入门篇和提高篇之间插一个强化上机实验...

    思维训练(二)如何找到缺失的数

    题目 在一个无序数组中有99个不重复的正整数,范围为1到100,唯独缺少1个1到100中...异或在java语言中也常用来 不借助第三方变量来交换两个数的值 以上为发散思维扩展 对于本题,将所有数异或,得到的结果就是这个奇次整数

Global site tag (gtag.js) - Google Analytics