首页 > 代码库 > 编程之美——中国象棋将帅问题

编程之美——中国象棋将帅问题

题目要求输出“将”(A),“帅”(B)的所有合法位置,并且只能使用一个字节存储变量;

解法一:

 1 #include<iostream> 2 using namespace std; 3  4 int main() 5 { 6     int i=81; 7     while(i--) 8     { 9         if(i/9%3==i%9%3)10             continue;11         else12             cout<<i/9+1<<\t<<i%9+1<<endl;13     }14     return 0;15 }
View Code

A,B各有九种取法,所以i=81,对于一个整数i=i/9*9+i%9;i%9随着i/9变化一轮,相当于一个嵌套循环;使用一个i表示两个值的变化;

当然也可以使用这种方法实现多重嵌套;

解法二:

 1 #include<iostream> 2 using namespace std; 3  4 struct myBite 5 { 6     unsigned char a:4; 7     unsigned char b:4; 8 }; 9 10 int main(void)11 {12     myBite i;13     for(i.a=1;i.a<=9;++i.a)14         for(i.b=1;i.b<=9;++i.b)15             if(i.a%3!=i.b%3)16                 cout<<(int)i.a<<\t<<(int)i.b<<endl;17     return 0;18 }
View Code

可参考相关位操作

 

编程之美——中国象棋将帅问题