即将面临找工作,最近在看《编程之美》这本书。自己能力有限所以觉得有些题目难度不小,但仍觉受益匪浅,有时间一定再读几遍。下面是关于“中国象棋将帅问题”的一些心得:
书中给出的算法的精妙之处这里不再赘述,给出自己的想法:
原理与书中给出算法相同,通过循环实现。对其中的任意一个位置k,其余8个位置都可以用k与1到8这8个数字的和对9取模来表示(其中和为0的情况要特殊处理)。问题的关键在于除了加3与加6两个位置外其余6个位置均为合法位置,所以程序将直接打印这6个合法位置。代码:
void ValidStation() { for(int a=1;a<=9;a++) { cout<<“A: “<<a<<” B: “<<(a%9+1)<<endl; cout<<“A: “<<a<<” B: “<<((a+1)%9+1)<<endl; cout<<“A: “<<a<<” B: “<<((a+3)%9+1)<<endl; cout<<“A: “<<a<<” B: “<<((a+4)%9+1)<<endl; cout<<“A: “<<a<<” B: “<<((a+6)%9+1)<<endl; cout<<“A: “<<a<<” B: “<<((a+7)%9+1)<<endl; } }