我做了一个网站,此网站有一个新闻资讯页面。
    在这个页面上分为了15个格子,每个格子的样式不同,比如有的格子里有新闻缩略图,有的只有标题和摘要,诸如此类,这15个格子是编号了的,按照时间来显示最新的15条新闻,这一步我觉得实施起来不会有什么问题。
    关键是这个新闻模块的另一个功能,是要可以把某条新闻固定地显示在某一个格子中,不受其他新闻更新时候的影响,举个例子吧:
    假设现在1,2,3,4号格子里有新闻,然后如果这时我添加了一条新的新闻之后,原来1号格子里的新闻会显示在2号格子,2号的显示到3号,3-4,4-5这样,最新添加的新闻会显示在1号格子,而倘若我设定了3号格子内的新闻锁定之后,再添加新闻的话,则1号显示最新新闻,2号显示原1号,3号仍然是显示原3号,原2号新闻这时就显示到4号格子内了,而同时我如果又设定了5号格子锁定的话,那么5号格子依旧显示原5号新闻,原3号新闻就会显示到6号格子内,以此类推。
    想了几个办法,都不能很好地控制这个锁定功能的开启和关闭,所以来这里希望能得到一些指点,请各位不吝赐教,非常感谢。
    

解决方案 »

  1.   

    这说明你缺乏基本的算法编程训练。这个流程简单,只要能尽量以“最简单的方法实现”就OK:void 将n号新闻设置到x号控件(int n, int x)
    {
        if (存在x号控件())
        {
            if (控件已经锁定(x))
                将n号新闻设置到x号控件(n, x + 1);
            else
            {
                var m = 当前的新闻编号(x);
                设置控件显示新闻(x, n);
                将n号新闻设置到x号控件(m, x + 1);
            }
        }
    }
    如果你没有递归的思想,你就会陷入混乱地拼凑算法的泥潭中。而如果你有点递归方法的训练,就会简单地自顶向下分解这种东西。
      

  2.   

    少一个参数,修改一下:void 将n号新闻设置到x号控件(int n, int x)
    {
        if (存在x号控件(x))
        {
            if (控件已经锁定(x))
                将n号新闻设置到x号控件(n, x + 1);
            else
            {
                var m = 读取当前的新闻编号(x);
                设置控件显示新闻(x, n);
                将n号新闻设置到x号控件(m, x + 1);
            }
        }
    }
      

  3.   

    写出递归的第算法,我们可以先简单地将尾递归的算法改为迭代的。void 将n号新闻设置到x号控件(int n, int x)
    {
        begin:
        if (存在x号控件(x))
        {
            if (控件已经锁定(x))
            {
                x++;
                goto begin;
            }
            else
            {
                var m = 读取当前的新闻编号(x);
                设置控件显示新闻(x, n);
                n = m;
                x++;
                goto begin;
            }
        }
    }通常轻松地写出一个伪代码式的流程,并不是软件开发的核心。算法就是讲究所谓地“自顶向下”地以分解就行了(然后可能需要学会以数学归纳的方法来计算空间复杂度函数和时间复杂度函数)。打个比方把,算法就好像是一个练武的人学会了花拳绣腿、会表演十几个套路。这是必由之路,你总要学点基础知识的!我们工作中招聘人,要求开发者学会设计程序。但是遇到你这种连简单的算法都不会写的,我们都不奢望他会去设计了,而是希望你能从基础学起。我想对这种程序感到困难的人应该想个办法正规地学点与数学、逻辑、算法有关的知识。业余地学习可能是比较困难的。
      

  4.   

    非常感谢您的建议和批评,我今后一定也会多多加强这方面的练习和学习。
    但是,有可能是我的问题表述出了问题,导致您的回答并不是我最急切想要知道的。
    关于您的这个算法,我是会设计的,现在的问题在于,我不太清楚对于我这个新闻页面(15个框也就是一堆<a><img><span>标签),应该如何将这些框编号,之后再把从数据库取出来的那些数据(新闻标题,作者,时间,图片,内容)显示到那些HTML标签中,用您设计的代码来看,就是如何判断控件已经锁定和“设置控件显示新闻(x,n)”这两步,关于显示数据,我只知道Eval()函数最基本的应用,如果还要判断每一个格子是几号,这个格子是否锁定,对我来说有有些困难了。