您的位置:首页 > 编程语言

《编程之美》学习笔记 1.2中国象棋将帅问题

2013-08-22 12:27 274 查看
这个问题并不难,这篇博文主要对书上的代码进行详细分析。

对于第二段代码,如下所示

#include<iostream>
using namespace std;
int main() {
char i=81;
//	int count=0;
while(i--) {
if((i/9+1)%3 == (i%9+1)%3){
continue;
}
cout<<"A="<<i/9+1<<", B="<<i%9+1<<endl;
//		count++;
}
//	cout<<count<<endl;
return 0;
}
其中,“81”表示对于“将”和“帅”,他们各自分别有9个位置,因此共有9x9=81种不同的位置组合。

将将帅的位置和变量“i”的对应关系列出来,如下图所示,可以发现规律



对于“i”的每次迭代(81...1),(i-1)/9+1表示“将”的位置,(i-1)%9+1表示“帅”的位置,通过对这两个位置分别进行“模3”运算后,比较二者是否相等来判断,若不相等,则该位置符合要求,输出相应的位置。

对于第三段代码,其思想跟第一段写了一堆宏定义的代码类似,如下所示

#include<stdio.h>
struct{
unsigned char a:4;
unsigned char b:4;
} i;
int main() {
//int count=0;
for(i.a=1;i.a<=9;i.a++){
for(i.b=1;i.b<=9;i.b++){
if(i.a%3 != i.b%3){
printf("A=%d, B=%d\n", i.a, i.b);
//count++;
}
}
}
//printf("%d\n",count );
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: