1.2中国象棋将帅问题

#include <stdio.h>
//#include <windows.h> 包含byte
#include <IOSTREAM>

using namespace std;

#define HALF_BIT_LENGTH 4
#define FULLMASK 255
#define LMASK (FULLMASK << HALF_BIT_LENGTH)
#define RMASK (FULLMASK >> HALF_BIT_LENGTH)
#define RSET(b,n)  (b=((b&LMASK)^n))
#define LSET(b,n)  (b=((b&RMASK)^(n << HALF_BIT_LENGTH)))
#define RGET(b)    (b&RMASK)
#define LGET(b)       ((b&LMASK)>>HALF_BIT_LENGTH)
#define GRIDW        3

int main(int argc,char* argv[])
{
    //byte <==> unsigned char
    unsigned char b;
    for(LSET(b,1);LGET(b) <= GRIDW*GRIDW;LSET(b,(LGET(b)+1)))
        for(RSET(b,1);RGET(b)<=GRIDW*GRIDW;RSET(b,(RGET(b)+1)))
            if(LGET(b)%3!=RGET(b)%3)
                //printf("A=%d,B=%d",LGET(b),RGET(b));
                cout<<"A="<<RGET(b)<<" "<<"B="<<LGET(b)<<endl;

    return 0;
}

 

#include <iostream>
using namespace std;

int main(int argc,char* argv[])
{
    unsigned char i=81;
    while(i--)
    {
        if(i/9%3!=i%9%3)
            cout<<"A="<<(i/9+1)<<" "<<"B="<<(i%9+1)<<endl;
    }
    return 0;
}

#include <stdio.h>

int main(int argc,char* argv[])
{
    struct i{
        unsigned char a:4;
        unsigned char b:4;
    }i;

    for(i.a=1;i.a<=9;i.a++)
        for(i.b=1;i.b<=9;i.b++)
            if(i.a%3!=i.b%3)
                printf("a=%d,b=%d\n",i.a,i.b);

            return 0;
}

最后一种方法采用了位域的方法来节省空间,注意输出时候不能使用cout了,会出现错误!

接下来介绍一下位域:


本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2024-11-05 17:29:05

1.2中国象棋将帅问题的相关文章

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

     千呼万唤始出来,在跳票了快一个月之后,虽然明知道书里还有不少错误没改过来(附了一整页的勘误),但是感觉已经不能等下一版了.赶快去书店买回来,吃完饭躺床上舒舒服服地看.大致翻看之后,总体感觉是书中的内容没有"脱离群众",很多都是我们平时生活.工作中经常能遇到的.题目不见得难,基本上给一本<算法导论>和足够的时间,大多数人都能解决其中的问题.但注意副标题--"微软技术面试心得",这就给这本书定下一个基调:面对这些我们并不陌生.也并非特别困难的问题,

位运算枚举解决象棋将帅问题

引子问题:在一把象棋的残局中,象棋双方的将帅不可以相见,即不可以在中间没有其他棋子的情况下在同一列出现.而将.帅各被限制在己方的3*3的格子中运动.相信大家都非常熟悉象棋的玩法吧,这里就不详细说明游戏规则了. 用A.B代表将和帅,请写出一个程序,输出A.B所有合法的位置.要求在代码中只能用一个变量. 中国象棋将帅问题: 分析与解法: 这个问题的解法并不复杂. 遍历A的所有位置 遍历B的所有位置 如果A的位置和B的位置在同一列 输出结果 否则 继续寻找 地图可以用0-8表示A或B可能的9个位置 0

Ps制作中国象棋棋子图片教程

  中国象棋相信大家都不会陌生,但如果要你通过PS制作中国象棋,相信很多朋友都不会.下面,本教程就来教大家如何通过PS制作中国象棋棋子教程,一起来学习下吧. 效果图 第一步:首先我需要制作木质背景,新建480*480像素的背景,然后执行"滤镜"-"杂色"-"添加杂色",数值为70,平均分布,单色,单击"好",如图. 第二步:执行"滤镜"-"模糊"-"径向模糊",数值为

Android实现中国象棋附源码下载_Android

象棋,很多人多接触过,学者写了一个,大神可以指点一下~直接上代码: 贴出主要代码,想要Demo的点击下载:中国象棋Demo package wyf.ytl; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; impor

c#-求解中国象棋规则问题

问题描述 求解中国象棋规则问题 在unity中象棋怎么控制走法规则,新手求指导.用的是c#,现在基本能够达到移动棋子,但时是定义规则走法的时候不知道怎么做. 解决方案 说个大概意思,基本上就是坐标+对象进行判断,如炮移动必须一线+隔一对象(无论红黑棋子)+对方棋子. 解决方案二: 如果是我做,会把一个棋子绑定一个实际对象,这个对象继承一个"Chessman"的接口,接口中描述移动规则,能否过河,能否吃子象棋有八个种类的棋子,做八种entity,全部继承Chessman接口,虽然这是ja

openmp-我想用MPI+OpenMP混合编程模型实现中国象棋博弈树并行搜索可以吗?怎么实现呢?

问题描述 我想用MPI+OpenMP混合编程模型实现中国象棋博弈树并行搜索可以吗?怎么实现呢? 对于中国象棋的博弈树怎样用MPI+OpenMP混合编程模型分解,MPI是进程级的,OpenMP是线程级的,两者混合可以实现博弈树的并行搜索吗 解决方案 应该是取决与你怎么实现的吧. 解决方案二: 可以混合,关键你怎么组织,调用

中国象棋源代码问题

问题描述 拜托各位大侠帮忙解决一下下面这个中国象棋代码中悔棋功能不能实现的问题啊,代码下载地址http://1.dc.ftn.qq.com/ftn_handler/55d3a3d089765c8521ce723c68d6d9295a22f05d063cccd2dbc41d917d1cf9ecde7ad15791375a2c28864976bdeef706009e3d01f81be3045c450d05058b2eda/Java中国象棋.rar?k=7c3736328cd2dbcb3eee1128

编程-用MFC编写中国象棋棋盘

问题描述 用MFC编写中国象棋棋盘 VS2010自动生成几个基础代码 怎样进行改写绘制象棋棋盘和棋子 解决方案 http://blog.csdn.net/vagrxie/article/details/1831995 解决方案二: 想要效果好,还是直接帖图比较可靠! 但你需要 UI 设计人员支持你的工作. 解决方案三: http://download.csdn.net/download/a435886030/7014285

8月10日蚕豆网不推荐的Android应用:《中国象棋》

前言:如雨后春笋般杂乱滋生的Android app遍布于网络中.下载平台中.用户的手机中,目前由于监管不严.开放性过大这些应用的安全性便成了当前Android手机最大问题.通讯录被复制.私人照片丢失.信息被公开等等事件的出现,其罪魁祸首当属那些存在安全隐患.内藏恶意代码的Android手机应用.鉴于此情况, 蚕豆网联合<安全管家>定 期为大家审查Android应用的安全性,尽我们最大力量来帮助用户来认清app.选择app,把最安全.最稳定的Android环境奉献给广大用户.应用名称:中国象棋M