码迷,mamicode.com
首页 > 其他好文 > 详细

《编程之美》读书笔记:中国象棋将帅问题

时间:2014-06-23 07:03:59      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

找出将和帅所有可能的局面,要求用一个字节的变量来存储数据。

 

我最初分析这道题,想可以枚举将的位置,那么一共有9个,再写出帅的位置就行,由于将帅不能照面,所以此时帅只有6个位置。答案必定有9*6=54个。只是判断照面的地方会比较麻烦。

由于只有一个字节的变量限制和以前做题经验,使我一度想歪以为要用二进制的位来表示将的位置。但是这样的话,一个字节只有8位,而将可有9个位置,显然不行。

当然,不应这样做,也没有必要这样。

后来想到另一种思路,可以把将和帅的位置同时压缩到一个十进制数字N里面,这样N=a*9+b,a和b分别是将和帅的位置编号。

位置如图:bubuko.com,布布扣

这样取N从0到80,即取遍了a和b所有可能的位置(包括照面的情况)。所以问题就变成了去掉照面的情况。

看图,什么时候a和b照面呢?明显是a和b位于同一列的时候,这样只需要判断a/3是否等于b/3即可。

 

  

bubuko.com,布布扣
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    for(int i=0; i<81; ++i)
    {
        if(i/9/3!=i%9/3)
        {
            cout<<i/9<<" "<<i%9<<endl;
        }
    }
    return 0;
}
View Code

 

 

《编程之美》读书笔记:中国象棋将帅问题,布布扣,bubuko.com

《编程之美》读书笔记:中国象棋将帅问题

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/kkkwjx/p/3799725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!