中国象棋将帅问题

来源:互联网 发布:mac jdk1.7 dmg 编辑:程序博客网 时间:2024/04/16 19:20

问题出自编程之美

问题描述:

用A表示将,B表示帅,求A,B所有合法位置,要求程序中只能使用一个字节存储变量

0 1 2

3 4 5

6 7 8


将A所有可能的位置按上编号

解法:

很容易想到用二进制位表示位置

一共9个位置,4个二进制位足够表示,A和B一个8个二进制位,刚好一个字节

代码如下

#include<stdio.h>int main(){unsigned char opt=0;for(;(opt&0xf0)<0x90;opt+=0x10){for(opt=opt&0xf0;(opt&0x0f)<0x09;opt+=1){if( (opt&0xf0) % 3 != (opt&0x0f) %3){printf("A = %d,B = %d\n",opt&0x0f,(opt&0xf0)>>4);}}}return 0;}
书上讲述了另一种方法,利用C语言提供了的一种机制叫位域