`

交换两个变量不要缓存

阅读更多

两个变量:a=3,b=2不用中间变量把它们交换一下。

这个老掉牙的问题,就是什么加加减减了,突然想想了。为什么能那样子做?有意义吗?

 

如果用变量。

tmp=a;

a=b;

b=tmp;

就行了。

 

传统的方法:+-法。

------------- a=3 b=2

a = a+b;    a=5 b=2

b = a-b;     a=5 b=3

a = a-b;     a=2 b=3(实现了交换)

 

其实这么说*/法也行了:

------------- a=3 b=2

a = a*b;    a=6 b=2

b = a/b;     a=6 b=3

a = a/b;     a=2 b=3(实现了交换)

 

这样子什么次方开方也就可以了,把这个在进一步推广的话就有很多很多种方法了,这些方法的规律是什么呢:

三步走:

第一步:a = a和b的共有信息;b的信息不变。【这个时候,a中为a和b的共有的信息,b为本来b的信息】

第二步:b = 由共有信息和(本b)信息 得到 (本a);【这个时候,a中为a和b的共有的信息,b为本来a的信息】

第二步:a = 由共有信息和(本a)信息 得到 (本b);【这个时候,a中为本来b的信息,b为本来a的信息】

 

不知道这个问题有没有什么实际的意义,只要按照这个方法推广一下,就有了无穷中变种了。

分享到:
评论

相关推荐

    JavaScript两个变量交换值的实现方法

    普通的做法就是声明多一个临时变量tmp,进行数据交换过程中的缓存。这样的做法直观,易懂。但是,会增加内存的使用。 二、算术运算 var a = 1, b = 2; a = a + b; // a = 3, b = 2 b = a - b; // a = 3, b = 1 a =...

    Labview共享变量实现网络通信

    共享变量分为两种主要类型:实时共享变量和历史共享变量。实时共享变量用于存储当前的值,而历史共享变量则会记录数据的历史变化,这对于数据分析和监控非常有用。 在Labview中,实现网络通信的第一步是创建共享...

    双缓存绘图实现

    它通过在内存中创建两个缓冲区(缓存)来实现:一个用于当前显示的内容,另一个用于准备绘制的新内容。当新内容准备好后,会快速地将当前显示的内容与新内容交换,从而避免了直接在屏幕上绘制时可能产生的闪烁效果。...

    开发技术-硬件-CMT处理器高速缓存的优化技术.zip

    如果多个不相邻的变量被映射到同一缓存行,可能导致不必要的数据传输,称为伪共享(False Sharing)。了解缓存行大小并避免伪共享,是优化CMT处理器缓存性能的重要策略。 六、并行数据访问 在CMT处理器中,不同...

    全局变量1

    在游戏开发等场景中,全局变量非常有用,因为它们可以在不同的脚本之间共享数据,无需通过参数传递或返回值的方式进行数据交换。对于Unity3D这样的游戏引擎而言,全局变量更是必不可少。 #### 二、使用`static`...

    双缓存实现风车转动.rar

    这个类可能包含两个成员变量,代表两个缓冲区,以及一系列方法来管理这些缓冲区的切换和绘图操作。例如: ```cpp class DoubleBuffer { public: DoubleBuffer(int width, int height); // 构造函数,初始化缓冲区...

    Integer缓存池案例1

    这两种方式各有优劣,但与Integer的交换问题关系不大。 在Java中,基本类型的传参是按值传递,对象的传参看似是引用传递,实际上是按共享对象的引用传递值。在上述例子中,虽然a和b看起来是Integer对象,但实际上...

    前端大厂最新面试题-bigo.docx

    题目中要求不使用额外的变量,交换两个变量的值。解法是使用 XOR 运算符或加法运算符来实现变量交换。 知识点 3: CSS 布局 3.1 两列布局 题目 5 中,考察了 CSS 布局的理解。题目中要求实现两列布局,其中左边...

    Java并发编程:volatile关键字解析

    例如,假设两个线程A和B都需要操作同一个变量`i`,初始值为0。线程A首先读取`i`的值,对其进行修改并更新回缓存;随后线程B也尝试读取和修改`i`的值。如果在这两个操作之间没有正确的同步机制,线程B可能会读取到...

    第9套PHP面试题1

    【PHP面试题1】:不使用第三个变量交换两个变量的值 在PHP中,我们可以巧妙地使用数组来实现不使用第三个变量交换两个变量的值。示例代码如下: ```php $a = "linux"; $b = "php"; $array = array($a, $b); $a = $...

    php实现memcache缓存示例讲解

    例如,将一个变量存储到缓存中: ```php $key = 'key1'; $value = 'Hello memcache'; $memcache->set($key, $value, false, 60) or die("写入缓存失败\n"); ``` 在上述代码中,`$key`是缓存中用于检索数据的键名,...

    一般企业.net面试题总汇

    【变量交换】在不依赖第三个变量的情况下,可以通过线性运算交换两个变量的值,例如对于整型变量X和Y,可以通过X = X + Y,Y = X - Y,X = X - Y来实现。 【Response.Redirect与Server.Transfer】`Response....

    Thread Synchronization in User Mode

    例如,在一个简单的示例中,两个线程各自增加全局变量 `g_x` 的值,如果没有适当的同步措施,最终结果可能不是预期的 `2`,因为线程间的操作可能会交错执行。 为了解决这类问题,我们可以使用互锁函数(Interlocked...

    MyGeneric_sadb3t_carryfz8_泛型的使用进阶_

    例如,可以定义一个`Swap(ref T a, ref T b)`方法来交换两个变量的值,无论它们是什么类型。这比为每种类型写一个单独的方法更高效,同时也减少了代码冗余。 泛型委托在事件处理或回调机制中扮演着重要角色。它们...

    happens-before俗解

    这意味着,当一个线程访问共享变量时,其数据会被加载到线程的工作存储(通常是缓存和寄存器的抽象)中。只有在特定情况下,这些数据才会被同步回主内存。因此,即使一个线程更新了共享变量,其他线程也可能看不到这...

    搜索引擎工程师面试题整理.pdf

    - 第二个代码段是正确的,使用了指针的后移操作,有效地交换了两个变量的值,实现了空间优化。 6. **程序输出分析** `RetMemory`函数返回了一个局部变量的地址,当函数执行完毕后,该局部变量的内存被回收,因此...

    电子专业笔试题目

    5. 不使用中间变量交换两个整数`a`和`b`的值: - 可以利用算术运算实现交换: ```c a = a + b; b = a - b; a = a - b; ``` 6. 焊盘和过孔的区别: - 焊盘(Pad):在PCB板上用于焊接电子元件的金属区域,...

    笔记-9、JMM和底层实现原理1

    当一个线程修改了共享变量,该变更可能不会立即反映到其他线程的缓存中,造成所谓的“缓存一致性”问题。 3. Java 内存模型(JMM) Java内存模型定义了Java程序中各个线程如何访问和修改共享变量,以确保在并发环境...

    php_apc.dll

    - **变量缓存**:可以缓存常量、变量,进一步提高性能。 **2. PHP 5.4.3 版本与APC的兼容性** 描述中提到的"php_apc.dll"适用于PHP 5.4.3版本。在升级或安装APC时,必须确保版本匹配,以免出现兼容性问题。APC对...

Global site tag (gtag.js) - Google Analytics