编程之美 - 将帅问题
来源:互联网 发布:手机制作软件 编辑:程序博客网 时间:2024/05/16 11:05
在中国象棋棋盘上,输出将帅不冲突的所有的位置,只使用一个变量。
想法:I
将帅能运行的空间 3 x 3,如果将在图中 A的位置, 帅在下面的6个位置都是合法的, 图中将帅不冲突的位置一共有 6 x 9 = 54 个
4 个bit 可以表示 16个状态, 那么一个char型的高4位可以表示将的位置,低4位可以用来表示帅的位置,已经足够了。
代码如下:
void function1(){ unsigned char value = 0; while ((value & 0x0f) < 9) { while ((value & 0xf0) >>4 < 9) { if (((value & 0x0f)%3) != (((value & 0xf0)>>4) %3)) { printf("%d : %d\n", (value & 0x0f), ((value & 0xf0) >> 4)); } value += 0x10; } value = value & 0x0f; value += 0x01; }}
想法 II
把将和帅的活动的区域看做是两个3x3 和 3x3的数组,两个数组的全排列组合为81组。
可以通过除以9取得 I 中的一个位置,通过 模9 取得下面的一个位置。
void function2(){ unsigned char value = 81; while (value--) { if (value/9%3 == value%9%3) continue; printf("%d : %d\n", value / 9 , value % 9); }}
想法 III
使用了一个结构体,也是一个变量,但使用了a,b两个成员变量,是不是违规了呢。
typedef struct { char a:4; char b:4;} _value;void function3(){ _value value; for (value.a = 0; value.a < 9; value.a++) for (value.b = 0; value.b < 9; value.b++) { if (value.a%3 != value.b%3) printf("%d : %d\n", value.a , value.b); }}
0 0
- 编程之美-将帅问题
- 编程之美 - 将帅问题
- <<编程之美>>之中国象棋将帅问题
- 编程之美之中国象棋将帅问题
- 编程之美之象棋将帅问题
- 编程之美之中国象棋将帅问题
- 编程之美之将帅问题
- 编程之美 - 中国象棋将帅问题
- 编程之美 - 读书笔记 - 中国象棋将帅问题
- 编程之美:中国象棋将帅问题
- 微软编程之美--中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美_002中国象棋将帅问题
- 编程之美 1.2 象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美---中国象棋将帅问题
- 编程之美二 : 中国象棋将帅问题
- 编程之美 -- 中国象棋将帅问题
- 教你简单识别某些砍价活动的真伪!!!
- Add Binary
- 周末学习线程
- ERROR 1813 -Mysql:Tablespace for table 'xxx`.'xxx` exists.
- 记忆化搜索求解区间型dp
- 编程之美 - 将帅问题
- Java多线程之ThreadGroupDemo
- Windows编辑类
- zk框架使用记录
- Android Studio目录结构浅析
- Python之email
- centos6中安装python2.7 与python3.3
- NOIP2015解题报告 By ljt12138
- LeetCode Spiral Matrix