编程之美读书笔记_1.2_中国象棋将帅问题

 1.2 中国象棋将帅问题


当初,刚看到题时,首先想到的是除法计算除数的商和余数(eax 和edx )。后来才想到需要动态**数组时,new 一维数组,用它模拟**数组时,**数组的下标和实际偏移量的转换,我想很多人学习C 或C++ 时都做过这种事吧。

本来以为题目要求输出将帅在棋盘上的具体位置,如d10 、f1 ,书中的解法给的是相对位置,解决起来更简单。解法一用了一堆令人讨厌的宏,代码实在不美,解法三和解法一本质是一样的,虽然解法三只定义了一个结构体,但结构体内有两个变量,不合题意才对。

要将一个变量i 拆成两个,可以按其的二进制表示,取出连续几位,比如第0-3 位和第4-7 位,读变量时,取出变量i 相应的几位,存变量时,再更新变量i 的对应几位。另外,再利用位置的对称性,可以一次输出两个,减少循环次数。

下面的代码和解法一类似,但是一次输出两个,减少了循环次数,并且没有用到除法,如果不考虑C++ IO 效率的影响,会比解法二和解法三都高效。

(flyinghearts)

原贴地址:http://blog.csdn.net/flyinghearts/archive/2010/05/18/5603669.aspx

 

扩展阅读 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值