Sweet Snippet 之 Bounce Setting

1. 题记

  又是一篇Sweet Snippet,自己看来都觉得过小,不足以成篇,不过自觉有些趣味,也就随便记一记了,权当自娱自乐 :)

  2. 问题

  程序中有时会用到所谓Bounce Setting这种技巧,目的是为了解决一些变量的“来回”设置问题,譬如一个布尔变量,最直观的Bounce Setting方法大概是这个样子:

if (boolFlag) {
    boolFlag = false;
}
else {
    boolFlag = true;
}

  以上代码虽说直观,但是仍然存在不少问题:譬如效率不高,分支判断代价高昂,再如代码表述略显累赘,不够简洁等等。一种更好的表达方式大概是这个样子:

boolFlag = !boolFlag;

  这种表达个人觉得非常聪明,很早之前自己便默默的记于心头了,每当遇到类似代码,总会不自觉的想起这个简洁美观的表达方式,近日在这里也看到了类似的代码,不过其中使用了整形变量1和0,相关的代码大概是这个样子:

value = 1 - value;

  看到之后突然觉得自己以前一直囿于布尔变量取非这么一种Bounce Setting的形式,而实际上,像上述的这种表达方法也是不错的思路,那么对于任意整数A、B,是否总是存在类似的这种表达式来优雅的完成Bounce Setting呢?不知你目前对此有什么想法,反正这个问题一开始是把我懵住了,但实际上,答案要比我想象的简单得多 :)

3. 道理

  假设表达式为一元一次多项式,不妨记为 f(x) = ax + b

  那么其应该满足的条件其实就是:

(1) f(A) = aB + b

(2) f(B) = aA + b

  经过一番高斯消去求解,我们得到 a = -1,b = A + B,于是有:

  f(x) = A + B - x

  嘿嘿,不知你看到这个表达式有什么想法,反正我是觉得挺好笑的,本来以为会是一个稍有繁复的公式,不想却是一个简单的能够一眼望穿的家伙,而自己一开始竟然也毫无察觉,着实好笑 :)

  废话打住,依据上述公式,任意整数间的Bounce Setting 方法直接套用即可,譬如说 A = 1、B = 0 那么自然有:

  f(x) = 1 + 0 - x = 1 - x

  OK,扯淡结束,就这么点东西了 :)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏take time, save time

你所能用到的数据结构(二)

      周末开始更新了,首先感谢各位对我写的东西还能保持兴趣,先回答几个留言中的一个问题和我对无损编码那一节的一个留言的一个看法,第一个是推荐算法书,首先,...

3156
来自专栏张俊红

Python面向对象编程

2215
来自专栏开发与安全

从零开始学C++之STL(六):变动性算法源代码分析与使用示例(copy_backward、 transform、 replace_copy_if 等)

首先回顾前面的文章,我们把for_each 归类为非变动性算法,实际上它也可以算是变动性算法,取决于传入的第三个参数,即函数 指针。如果在函数内对容器元素做了修...

1990
来自专栏牛客网

吉比特面试经验 游戏研发岗实习生

3520
来自专栏我的python

递归方法的理解

递归思想算是编程中比较常见但对初学者而言又有些难以理解的方法了。在leetcode上刷了几道题都用递归思想成功解决后觉得应该贯彻互联网的开源共享精神,总结一下自...

1070
来自专栏HansBug's Lab

2729: [HNOI2012]排队

2729: [HNOI2012]排队 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 957  Solved:...

2965
来自专栏机器学习算法与Python学习

长文 | 手把手教你如何使用python进行数据分析(最好将文章代码自己码一遍)

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 原文 http://www.cnbl...

3855
来自专栏编程

编程老司机带你玩转C语言指针

很多初学编程的小伙伴都会选择C语言作为第一门学习的编程语言,应为C语言作为一门底层语言相对于其他的高层语言来说更加容易学习。可以来帮助正在学习编程的小伙伴更加快...

2476
来自专栏喔家ArchiSelf

IOT语义互操作性之本体论

这个系列文章描述了一个单一的语义数据模型来支持物联网和建筑、企业和消费者的数据转换。 这种模型必须简单可扩展, 以便能够在各行业领域之间实现插件化和互操作性。 ...

1135
来自专栏程序员互动联盟

【答疑解惑】失之毫厘谬以千里

1、scanf使用陷阱 ? ? 如果scanf中%d是连着写的如“%d%d”,在输入数据时,数据之间不可以加逗号,只能是空格或tab键或者回车键“1 2” 或 ...

3017

扫码关注云+社区

领取腾讯云代金券