编程之美 1.2 中国象棋将帅问题
2014-02-28 18:31
183 查看
编程之美 1.2 中国象棋将帅问题
版权所有, 禁止转载, 如有需要, 请站内联系.本文地址: http://blog.csdn.net/caroline_wendy/article/details/20149075
题目: A表示“将”, B表示“帅”, 请写出一个程序输出A, B所有合法位置, 使用一个字节存储变量.
答案:
输出一些互斥的组合, 可以抽象为:
即:
1, 4, 7 除 3 余 1;
2, 5, 8 除 3 余 2;
3, 6, 9 除 3 余 0;
除3余数(%3)不相等即可;
使用一个字节存储变量是关键, 则需要对2进制数进行操作, unsigned char是占用一个字节;
基本解法:
void Chess (void) {
for (i.a=0; i.a<9; ++i.a)
for (i.b=0; i.b<9; ++i.b)
if (i.a%3 != i.b%3)
printf ("A=%d, B=%d \n", i.a+1, i.b+1);
}
解法2:
可以利用移位运算, 进行求解, 81=10000(3进制), 后两位为一个数字, 前两位为一个数字,
除法(/)就是移位运算, 除以9就是移两位, 再进行比较余数(%);
void Chess2 (void) {
unsigned char i = 81;
while (i--) {
if ((i/9%3) == (i%9%3))
continue;
printf ("A=%d, B=%d \n", i/9+1, i%9+1);
}
}
完整代码:
/*
* Test.cpp
*
* Created on: 2014.2.27
* Author: Spike
*/
/*eclipse cdt, gcc 4.8.1*/
#include <stdio.h>
struct {
unsigned char a:4; //占4位
unsigned char b:4;
} i;
void Chess (void) {
for (i.a=0; i.a<9; ++i.a)
for (i.b=0; i.b<9; ++i.b)
if (i.a%3 != i.b%3)
printf ("A=%d, B=%d \n", i.a+1, i.b+1);
}
void Chess2 (void) {
unsigned char i = 81;
while (i--) {
if ((i/9%3) == (i%9%3))
continue;
printf ("A=%d, B=%d \n", i/9+1, i%9+1);
}
}
int main (void) {
Chess();
return 0;
}
输出:
A=1, B=2
A=1, B=3
A=1, B=5
A=1, B=6
A=1, B=8
A=1, B=9
A=2, B=1
A=2, B=3
A=2, B=4
A=2, B=6
A=2, B=7
A=2, B=9
A=3, B=1
A=3, B=2
A=3, B=4
A=3, B=5
A=3, B=7
A=3, B=8
A=4, B=2
A=4, B=3
A=4, B=5
A=4, B=6
A=4, B=8
A=4, B=9
A=5, B=1
A=5, B=3
A=5, B=4
A=5, B=6
A=5, B=7
A=5, B=9
A=6, B=1
A=6, B=2
A=6, B=4
A=6, B=5
A=6, B=7
A=6, B=8
A=7, B=2
A=7, B=3
A=7, B=5
A=7, B=6
A=7, B=8
A=7, B=9
A=8, B=1
A=8, B=3
A=8, B=4
A=8, B=6
A=8, B=7
A=8, B=9
A=9, B=1
A=9, B=2
A=9, B=4
A=9, B=5
A=9, B=7
A=9, B=8
相关文章推荐
- 编程之美 - 1.2 中国象棋的将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 编程之美 1.2 中国象棋将帅问题
- [编程之美] PSet1.2 中国象棋将帅问题
- 编程之美--游戏之乐--1.2中国象棋将帅问题
- 编程之美 ---> 1.2中国象棋将帅问题
- 【编程之美】1.2中国象棋的将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 编程之美_1.2中国象棋将帅问题
- 读书笔记之编程之美 - 1.2 中国象棋将帅问题(更快的算法)
- 编程之美之中国象棋将帅问题
- 《编程之美》学习笔记 1.2中国象棋将帅问题
- 编程之美读书笔记_1.2_中国象棋将帅问题
- 编程之美-中国象棋将帅问题方法整理
- 《编程之美》 1.2 中国象棋将帅问题
- 【编程之美 】-中国象棋将帅问题
- 编程之美二 : 中国象棋将帅问题
- 【编程之美】中国象棋将帅问题
- 编程之美阅读心得——中国象棋将帅问题
- 编程之美读书笔记1.2——中国象棋将帅问题