A001-书籍-像程序员一思考

书籍:《像程序员一思考》(修订版-2015)


主要内容:1、摘录
                    2、习题解答


-------------------------------------------------------------------------------------------------------------------------------------

一、 摘录:    

1、 2-3-Luhn算法:

代码和测试:http://blog.csdn.net/manon_des_source/article/details/51728449





-------------------------------------------------------------------------------------------------------------------------------------

二、 习题:    

1-1、  数独游戏

在线数独游戏:    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。


1-2、  数字滑块游戏

数字滑块游戏:    http://www.4399.com/flash/126673_2.htm

难度翻了1番吧,人们通常只习惯数字序列,而不是文字序列或图片序列,序列很适合使用旋转/火车列的方式移动而不出错。

而图片可以更直观的看出一行(或一列)的图片是否拼好,以至于将n*m阶将为(n-1)*m阶(或n*(m-1)阶),这是好处,数字就需要慢慢数。


1-3、 数字拼图游戏

新的策略-插入法(对于2*3以上的拼图,可以使用如下策略,当拼图评到等于2*3时就不适用了):

1、目的是将数字直接插入正确的位置,通过旋转的方法,如、下面将最左边一列的3个数字直接插入到位:

      

        

另外、发现2个无解的拼图:

                

1-4、 简化问题:

1、重新表述这个问题,将它拆分成多个相联系的小块

2、弱化或去掉一些约束条件



同类迷题:传教士和吃人恶魔问题:https://zh.wikipedia.org/wiki/传教士和吃人恶魔问题


1-5、 陷入僵局时:

1、将问题的约束条件列出来

2、将所有可能的操作列出来

3、简化问题

4、寻找雷同的问题


-------------------------------------------------------------------------------------------------------------------------------------

2-1、 8*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
}








你可能感兴趣的:(程序员,像程序员一思考的习题,像程序员一思考)