题目大意:
设A表示“将”,B表示“帅”,AB均只能在各自的九宫格内移动,但是他们不能遥相对望,输出所有A、B的合法位置。要求只能使用一个变量。
分析:设九宫格如下:
1 2 3
4 5 6
7 8 9
假设我们已知了A位置i和B位置j,那么我们判断他们合法只需要判断i%3和j%3不等即可,那么我们的工作也就是怎么样只用一个变量将A、B位置都保存起来
1、可以用位的思想,用一个数中不同的位来表示不同的信息,处理起来较为繁琐,见编程之美;
2、可以构造这样一个数i,用i/9+1表示A的位置(1~9),i%9+1表示B的位置(1~9),那么A共9个位置,B9个位置,所以共有81种方式,遍历这81种方式即可
#include <iostream> #include <windows.h> #include <stdlib.h> #include <math.h> using namespace std; int main(){ BYTE i=81; while(i--){ if(i/9%3==i%9%3)continue; printf("A=%d,B=%d\n",i/9+1,i%9+1); } return 1; }
#include <iostream> #include <windows.h> #include <stdlib.h> #include <math.h> using namespace std; struct{ unsigned char a; unsigned char b; } i; int main(){ 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); return 1; }
原文:http://blog.csdn.net/starcuan/article/details/20235337