zerO

纪念我所怀念的一切.

« 编程之美《编程之美》1.3烙饼的排序 »
2010-1-9 23:51:52 | 发布:linfuqing | 分类:编程之美 | 评论:0 | 引用:0 | 浏览:

《编程之美》1.2中国象棋将帅问题

这个题目被《编程之美》标注为三颗星难度。事实上是很简单的问题。

大体意思是假设中国象棋棋盘上只有将和帅,写程序输出将帅在棋盘上的所有合法位置(将帅不能照面,并且只能在棋盘田字格里移动),要求只能使用一个变量。

后面又标定了将帅田字格的位置,如下图:

书上介绍的做法很复杂,我没看,用很多宏定义动态定义很多位运算,我懒得看了,下面放上我自己的做法:


 

#include <stdio.h>

typedef struct
{
 unsigned char a:4;
 unsigned char b:4;
}BYTE;

void main()
{
 BYTE i;

 for(i.a = 1; i.a <= 9; i.a++)
 {
  for(i.b = 1; i.b <= 9; i.b++)
   if((i.b - i.a) % 3)        //差比余3,这样可以使列不冲突
    printf( "A= %d, B= %d\n", i.a, i.b);
 }
}


以下是结果:

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
 

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

最新评论及回复

友情链接

[Top] Powered By Z-Blog 1.8 Arwen Build 81206. Theme FormerDays Design By haphic

[-Do U rmAmb al _LEAVEs_ Missing UnderTheTree-]
All by 怀念从前.