学习心得(六)

来源:互联网 发布:linux 内网 代理上网 编辑:程序博客网 时间:2024/06/08 23:59

 

 

1.gets()
    不以空格作为字符串输入结束的标志,而以回车作为输入标志。

2.自动变量(auto)
    函数内凡未加存储类型的变量均视为自动变量。
    由于自动变量的作用域和生存期都局限于定义它的个体内(函数或复合语句内),因此不同的个体中允许使用同名的变量而不会混淆。

3.迷宫的算法
    迷宫的信息用二维数组存储,例如入口(行、列号)、出口(行、列号)、可以走(元素值为1)、不可以走(元素值为0);实现过程中要用到栈。
    思路:通过分析一个元素上、下、左、右元素可否走来对数组的值进行修改,最后用值2标志出从入口到出口的路径。
    算法:定义结点数据类型,包括一个值,两个指针(一个指向前一结点、一个指向后一结点)。
    1.当前结点指向迷宫入口并推入栈,值为2;
    2.如果当前结点不是出口,依次判断当前结点的上、右、下、左格是否存在&&可走,如果可走就把当前结点的后指针指向新结点,新结点的前结点指向当前结点,移动当前结点到新结点,执行1。如果4个方向均不可走,把当前结点置为3并退栈,退到当前结点的前一结点上,循环2;
    3.如果当前结点是出口,则结束;否则继续循环2。

4.扫雷的算法
    雷的信息由二维数组存储,有雷的格子值为10,其余为0。
    思路:若要实现x*y的扫雷,则使用(x+2)*(y+2)的二维数组。捕捉用户点击,判断9格状态。
    算法:根据雷的位置,计算不是雷的格子,把0改变为0-8。数据结构,数组中存放2信息,一是值,二是标志(是否打开)。
    1.初始化。二维数组内容全部置0,雷置10,标志全为未打开;纪录雷的个数bomb,已打开格数open=0;在x*y范围内,从00格开始到xy格结束,如果本格不是10,则累计周围8格中为10的元素个数,并赋值,如果是10,什么都不做;
    2.在x*y范围内,捕捉用户点击,若(打开格数+雷数)<(x*y),则;
    3.得到点击的格,判断此格以及周围8格是否为10,若是,则游戏结束,玩家失败,否则,打开9格;纪录打开格数+9;
    4.等待下次用户点击;
    5.若(打开格数+雷数)=(x*y),玩家赢。
    ps:使用(x+2)*(y+2)的二维数组的原因是,在填充数据的时候,避免越界导致我们修改了不该修改的数据。

5.洗扑克的算法
    前提条件:一副52张的牌,没有大小毛,不考虑花色,存在数组里,如何把牌洗得很乱?不够乱赌场会赔钱。
    swap(cards[i], cards[random() % (54 - i) + i])。

原创粉丝点击