编程之美 1.2 中国象棋将帅问题
来源:互联网 发布:mac怎么下载ps cs6 编辑:程序博客网 时间:2024/05/01 03:22
编程之美 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
6 0
- 编程之美 1.2 中国象棋将帅问题
- 编程之美1.2 中国象棋将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 1.2-编程之美-中国象棋将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 编程之美1.2中国象棋将帅问题
- <<编程之美>>之中国象棋将帅问题
- 编程之美之中国象棋将帅问题
- 编程之美之中国象棋将帅问题
- 编程之美 - 中国象棋将帅问题
- 编程之美 - 读书笔记 - 中国象棋将帅问题
- 编程之美:中国象棋将帅问题
- 微软编程之美--中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美_002中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美---中国象棋将帅问题
- 编程之美二 : 中国象棋将帅问题
- PHPWord中文乱码问题解决方案
- 同时启动多个Tomcat 和 Linux部署多个tomcat
- 电子笔记
- extjs的文件上传
- 《Mali OpenCL SDK v1.1.0》教程样例之四“图像对象”
- 编程之美 1.2 中国象棋将帅问题
- The introduction of Regex
- struts2.X心得12--OGNL表达式语言1
- Spring中scopes属性。
- 将NavigationBar设置透明
- DM8168集成图像算法(改正官方文档中错误)
- Android小部件AppWidget
- Cocos2d-x 2.0 自适应多种分辨率
- PHPExcel案例记录整理