编程之美之中国象棋将帅问题
2014-05-22 17:47
246 查看
问题描述:
如上图所示,将与帅被限制在3*3的格子里运动。我们假定“将”用A来表示,“帅”用B来表示。A、B可以横向与纵向移动一格,但是不能沿对角线方向移动。A与B不能处于同一纵向线上。如A在的位置,那么B就不能在,,的位置。程序代码只能用一个字节存储变量。
实现代码如下:
#include <stdio.h>
int main()
{
struct test{
unsigned char a:4;
unsigned char b:4;
} t;
for ( t.a = 1; t.a <= 3; ++t.a )
{
for ( t.b = 1; t.b <= 9; ++t.b )
{
if ( t.b%3 != t.a%3 )
{
//位于同一纵向线上的情况一样
printf("<A = %d,B = %d>", t.a,t.b );
printf("<A = %d,B = %d>", t.a + 3,t.b );
printf("<A = %d,B = %d>", t.a + 6,t.b );
printf("\n");
}
}
}
return 0;
}
如上图所示,将与帅被限制在3*3的格子里运动。我们假定“将”用A来表示,“帅”用B来表示。A、B可以横向与纵向移动一格,但是不能沿对角线方向移动。A与B不能处于同一纵向线上。如A在的位置,那么B就不能在,,的位置。程序代码只能用一个字节存储变量。
实现代码如下:
#include <stdio.h>
int main()
{
struct test{
unsigned char a:4;
unsigned char b:4;
} t;
for ( t.a = 1; t.a <= 3; ++t.a )
{
for ( t.b = 1; t.b <= 9; ++t.b )
{
if ( t.b%3 != t.a%3 )
{
//位于同一纵向线上的情况一样
printf("<A = %d,B = %d>", t.a,t.b );
printf("<A = %d,B = %d>", t.a + 3,t.b );
printf("<A = %d,B = %d>", t.a + 6,t.b );
printf("\n");
}
}
}
return 0;
}
相关文章推荐
- 编程之美 - 读书笔记 - 中国象棋将帅问题
- 编程之美---中国象棋将帅问题
- 编程之美 1.2 中国象棋将帅问题
- 【编程之美】中国象棋将帅问题
- 【编程之美】中国象棋将帅问题
- 【编程之美】妙用位域解中国象棋将帅问题
- [编程之美] PSet1.2 中国象棋将帅问题
- 读书笔记之编程之美 - 1.2 中国象棋将帅问题(更快的算法)
- 编程之美 1.2 中国象棋将帅问题
- 编程之美-中国象棋将帅问题方法整理
- 编程之美-中国象棋将帅问题
- 编程之美-中国象棋将帅问题
- 编程之美 -- 中国象棋将帅问题
- 编程之美_1.2中国象棋将帅问题
- 【编程之美】妙用位域解中国象棋将帅问题
- 【编程之美】1.2中国象棋的将帅问题
- 编程之美阅读心得——中国象棋将帅问题
- 编程之美 ---> 1.2中国象棋将帅问题
- [编程之美]中国象棋将帅问题
- 编程之美之中国象棋将帅问题