书籍:《像程序员一思考》(修订版-2015)
主要内容:1、摘录
2、习题解答
代码和测试:http://blog.csdn.net/manon_des_source/article/details/51728449
在线数独游戏: http://en.oubk.com/DailySudoku/16966/3
解决 中等难度数独游戏的通用计划:1、找到已知数字最多的 行/列/(3*3)区域,根据游戏的约束条件在空格中填入正确的数字。
2、填完一遍之后,如果确实在该 行/列/(3*3)区域 的空格中填入了数字,就根据约束条件重新再填一遍。
一直重复这个步骤,直到该 行/列/(3*3)区域 没有填入任何数字,最后返回步骤1。
3、若该 行/列/(3*3)区域 剩余2个空格,且每个空格都可以填入剩余的2个数中的任何一个,随机填入一种可能,但要满足约束条件。
4、若该 行/列/(3*3)区域 的全部空格都有>=3种可能的数字可以填,那么在其中2个空格中随机填入一种可能,但要满足约束条件。
最后返回步骤1。
数字滑块游戏: http://www.4399.com/flash/126673_2.htm
难度翻了1番吧,人们通常只习惯数字序列,而不是文字序列或图片序列,序列很适合使用旋转/火车列的方式移动而不出错。
而图片可以更直观的看出一行(或一列)的图片是否拼好,以至于将n*m阶将为(n-1)*m阶(或n*(m-1)阶),这是好处,数字就需要慢慢数。
新的策略-插入法(对于2*3以上的拼图,可以使用如下策略,当拼图评到等于2*3时就不适用了):
1、目的是将数字直接插入正确的位置,通过旋转的方法,如、下面将最左边一列的3个数字直接插入到位:
另外、发现2个无解的拼图:
1、重新表述这个问题,将它拆分成多个相联系的小块
2、弱化或去掉一些约束条件
1、将问题的约束条件列出来
2、将所有可能的操作列出来
3、简化问题
4、寻找雷同的问题
-------------------------------------------------------------------------------------------------------------------------------------
任务列表:
1、生成8*4矩阵
2、生成8*4斜三角
3、生成8*4正三角
void print_8_4_triangle(void) { int line = 0; int row = 0; #define step_2_1 2 cout << "print_8_4_triangle:" <<endl; #if (step_2_1 == 1) for(line = 0; line < 4; line++) { for(row = 0; row < 8; row++) { cout << '#'; } cout <<endl; } #elif (step_2_1 == 2) for(line = 4; line > 0; line--) { for(row = 0; row < 2 * line; row++) { cout << '#'; } cout <<endl; } #elif (step_2_1 == 3) #else cout << "error" <<endl; #endif }