`
slmi
  • 浏览: 33414 次
  • 性别: 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
分享到:
评论

相关推荐

    02交换两个变量的值

    ### 02交换两个变量的值 #### 知识点概览 本篇文章将深入探讨在编程语言中如何实现两个变量值的交换,并通过具体的示例代码进行详细讲解。主要涉及的知识点包括变量声明、赋值操作以及使用第三个辅助变量进行值...

    示例代码:不经过中间变量交换两个数

    以下是一段C语言代码示例,演示了如何使用位异或运算符实现不使用额外变量交换两个数的值: ```c void main() { int a = 3; int b = 1; // 第一步:a = a ^ b a = a ^ b; // a 的值现在是 3 ^ 1 = 2 // 第二...

    Java两个变量的互换(不借助第3个变量)具体实现方法

    在Java编程中,有时我们需要交换两个变量的值,但又不希望使用额外的第三个变量来辅助这个过程。这种情况下,可以利用位运算中的异或(XOR)操作符来实现两个变量的互换。本文将详细讲解如何通过异或运算在Java中不...

    c代码-2.功能:不用第三个变量,实现两个数的对调操作。

    但是,有一种巧妙的方法可以在不使用第三个变量的情况下实现两个数的对调,这种方法利用了算术运算和赋值操作的结合。下面我们将详细讨论这个知识点。 首先,我们需要了解的是,任何对变量的操作都是基于内存中的...

    两个书交换最小内存方法

    **异或交换法**是一种非常有趣的不使用额外变量来交换两个整数的方法。它基于XOR运算的特点,即任何数与自身进行XOR操作结果为0,任何数与0进行XOR操作结果为该数本身。具体步骤如下: 1. **初始化**: - 假设有两...

    两数交换的三种方法C#_java 两数交换的三种方法 两数交换方法

    代码首先初始化两个整型变量A和B,分别赋值为2和3。然后,依次执行上述三种交换方法,并在每次交换后打印A和B的值,以便观察结果。 同样,在C#示例代码中,也实现了相同的逻辑。通过点击事件触发,演示了使用临时...

    C语言程序设计之交换两个数的值

    给定的代码中还包含了一个用于交换两个整数值的函数`swap`。 #### 函数实现 ```c int swap(int a, int b) { cout ()" ; cout ; a = a + b; b = a - b; a = a - b; cout ()" ; cout ; return 0; } ``` 在这...

    JS实现不用中间变量temp 实现两个变量值得交换方法

    在JavaScript编程中,有时我们需要交换两个变量的值而无需使用额外的中间变量。这在内存管理有限或希望优化代码的情况下特别有用。以下是三种常见的方法来实现这个目标: 1. **加减法交换**: 这是最直观的方法,...

    数据结构-3期(KC002) 两个整数交换.docx

    标题中的“数据结构-3期(KC002) 两个整数交换.docx”指的是一个关于数据结构的学习资料,可能是一份课程的第三阶段作业或教学内容,涉及如何交换两个整数的值。这个过程在编程中是常见的,尤其是在处理数组、列表...

    思维挑战1:交换变量中的数.zip

    假设我们有两个整型变量a和b,它们分别存储了初始值。我们可以创建一个新的临时变量temp,将a的值暂存到temp中,然后将b的值赋给a,最后将temp中的值(原本a的值)赋给b。这样,a和b的值就成功互换了。代码如下: `...

    小学信息学竞赛-第2课

    交换两个变量的值可以使用第三个变量的方法,例如: int a, b; int t; cin>>a>>b; t=a; a=b; b=t; cout; 三、基本数据类型 基本数据类型是指计算机中最基本的数据类型,包括整型、浮点型、字符型等。 1. 整型 ...

    .net面试题1.net面试题1

    ### 不使用第三个变量交换两个变量的值 #### 知识点概述 在编程过程中,有时候我们需要交换两个变量的值,而传统的方法是引入一个临时变量来完成这一操作。然而,在某些情况下,我们可能希望避免使用额外的存储空间...

    任意两个整数之间的和

    3. **用户输入**:为了获取用户的两个整数,我们需要使用输入函数。在Python中,可以使用`input()`函数,然后将返回的字符串转换为整数,例如`int(input())`。在Java中,可以使用`Scanner`类的`nextInt()`方法。 4....

    输入两个正整数m和n,求其最大公约数 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛

    【程序 1】是求两个正整数 m 和 n 的最大公约数的 Java 程序。这个程序采用辗转相除法(欧几里得算法)来实现。首先,通过 `Scanner` 类从用户那里获取两个输入的正整数。然后调用 `max` 方法,该方法中首先检查 a ...

    C与C++笔试面试常考终极秘籍

    1. **交换两个变量的值**:不使用第三个变量的情况下,可以通过算术运算或异或操作来实现。例如: - 算术运算:`a = a + b; b = a - b; a = a - b;` - 异或操作:`a = a ^ b; b = a ^ b; a = a ^ b;` 或 `a ^= b ^...

    冒泡法排序对相邻的两个元素进行比较

    ### 冒泡法排序对相邻的两个元素进行比较 #### 概述 冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是通过不断地交换相邻的未正确排序的元素来对一组数据进行排序。该算法的名字来源于较小的元素会像...

    头歌C语言实验C语言学习之-指针入门练习通关代码

    在这个例子中,声明了四个整型变量`a`、`b`以及两个整型指针`p1`和`p2`。`*`符号在声明指针时表示这是一个指向整型变量的指针。例如,`int *p1`表示`p1`是一个可以存储整型变量地址的指针。通过`p1 = &a`,我们让`p1...

    C语言习题集3

    `使用`%d`格式输出两个整型变量`h`和`k`的值,并在输出前添加了标签`h=`和`k=`。注意这里的输出每行只包含一个变量。 4. **输出浮点型变量带格式控制** - 运行结果:B.x=12.346,y=345.235 - 解析:`printf("x=...

    C语言中交换int型变量的值及转换为字符数组的方法

    在给出的示例代码中,展示了如何通过异或操作(^)来交换两个整型变量`a`和`b`的值: ```c a = a ^ b; // 第一次异或操作,a的值与b的值互换 b = b ^ a; // 第二次异或操作,此时b的值变成了原来的a值 a = a ^ b; /...

    变量的使用

    // 交换两个变量的值 int temp = num1; num1 = num2; num2 = temp; System.out.println("交换后:"); System.out.println("num1: " + num1 + ", num2: " + num2); scanner.close(); } } ``` ##### 案例4...

Global site tag (gtag.js) - Google Analytics