编程珠玑之左右互博术

   “设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西。” ---编程珠玑
   
    不小心已经看到第二章,记得前言中讲到此书不要读的太快,努力解答每章后面的习题。俺们是一个不太喜太欢动脑子的人,能看懂就看,不懂就跳过,知道有此之事就Ok,混个脸熟。 如果以后遇到类似问题看能不能想的起。
   
    问题:将一个n元一维向量向左旋转i个位置,且内存使用只在数十个字节。 刚开始一看题目就被愣住了,读了三遍第一句就没看懂,当时感觉是不是自己连语文都没过关。直到读到后面作者揭晓答案时才恍然大悟,那个激动的呀!!
   
    我把这个问题转换成一个神奇的操作,不信你按照我写的来作:
    打开一个word文档中,你输入一串字符串 123456, 你拖动鼠标选择了后面456三个字符串,按住鼠标左键不放,拖动鼠标到字符串1的前面,松开鼠标!很神奇吧!变成了新的字符串456123。
    
    我们抛开所有拖动鼠标操作,看看这个操作核心的东西是什么,就是将456个123交换了一下位置,或看成循环移位。
按一般普通的想法,不就是一个交换吗? 把123先放到一个临时变量里,把456复制到原来123这个位置,然后再从临时变量里把123复制回来。 问题到能解决,是要求是内存使用只能在数十个字节。如果这个字符串很长.....
    
    我按照书中教的左右互博术就能解决这个问题,太妙了。想当年只有郭靖、小龙女才能学会此法门,今天我也会了。嗯,不好,听说只有脑子反应迟钝的人才学的会呀,难道我真的很笨吗?不对,我应该是像小龙女一样心若止水,一尘不染吧!
   
    左右互博术:先从左手大姆指开始写上1,食指写上2 ...到小指写上5, 右手小指开始写上6,....,到右手姆指写上10, 如果没有镜子,最好手指正反面都写上。   看好了1~10,ok开始。

 

   1.预备式:气沉丹田,掌心向上,托于胸前。此时要注意看清:手指上1、2...8、9、10 十个数字。
   2.左掌式:从左向右旋转左掌,手心向外,手背向内。 此时注意手指文字应该为 5、4、3、2、1、6、7、8、9、10
   3.右掌式:自右向左旋转右掌,手心向外,手背向内。 此时注意手指文字应该为 5、4、3、2、1、10、9、8、7、6
   4.互博式:此式最为关键,左右双掌交叉为十字执与胸前,向前推出。自己看看手指上的数字顺序有什么变化。
  

  
以下是delphi实现代码,本来想做一个可以用鼠标拖动的,鼓捣了半天还是不会,只能简单点了。

  

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值