传说中失传已久的天罗地网排序法(搞笑)

莫非是传说中失传已久的天罗地网排序法?

for(i=0;i<5;i++)
{
if(school[i].total_score==a[0])
school[i].rank=1;

if(school[i].total_score==a[1]&&a[1]!=a[0])
school[i].rank=2;

if(school[i].total_score==a[1]&&a[1]==a[0])
school[i].rank=1;

if(school[i].total_score==a[2]&&a[2]!=a[1])
school[i].rank=3;

if(school[i].total_score==a[2]&&a[2]==a[1]&&a[1]==a[0])
school[i].rank=1;

if(school[i].total_score==a[2]&&a[2]==a[1]&&a[1]!=a[o])
school[i].rank=2;

if(school[i].total_score==a[3]&&a[3]!=a[2])
school[i].rank=4;

if(school[i].total_score==a[3]&&a[3]==a[2]&&a[2]!=a[1]&&a[1]!=a[0])
school[i].rank=3;

if(school[i].total_score==a[3]&&a[3]==a[2]&&a[2]==a[1]&&a[1]!=a[0])
school[i].rank=2;

if(school[i].total_score==a[3]&&a[3]==a[2]&&a[2]==a[1]&&a[1]==a[0])
school[i].rank=1;

if(school[i].total_score==a[4]&&a[4]!=a[3])
school[i].rank=5;

if(school[i].total_score==a[4]&&a[4]==a[3]&&a[3]!=a[2]&&a[2]!=a[1]&&a[1]!=a[0])
school[i].rank=4;

if(school[i].total_score==a[4]&&a[4]==a[3]&&a[3]==a[2]&&a[2]!=a[1]&&a[1]!=a[0])
school[i].rank=3;

if(school[i].total_score==a[4]&&a[4]==a[3]&&a[3]==a[2]&&a[2]==a[1]&&a[1]!=a[0])
school[i].rank=2;

if(school[i].total_score==a[4]&&a[4]==a[3]&&a[3]==a[2]&&a[2]==a[1]&&a[1]==a[0])
school[i].rank=4;
}

http://blog.sina.com.cn/spotofleopard

17 responses to “传说中失传已久的天罗地网排序法(搞笑)

  1. 这个可能要懂点电脑的才看得明白。

    哪位懂coding的帮忙翻译成中文。

  2. 海天一色

    对我来说就是看天书了:(

  3. 怪不得叫’天罗地网排序法’, 这个罗格和网眼也忒大的说.

    我大概是太电脑了, 看不出搞笑来, 一看出点意思来, 就恨不得把它FIX过来. :) 不过, 估计就是搞在想FIX的地方. :)

    如果叫我翻译, 我只懂把’if’翻成’如果’, ‘school’翻成’学校’, ‘total_score’翻成’总成绩’, ‘rank’翻成’排名’. 这个for(i=0;i<5;i++)嘛, 就是有5间学校的意思, 每间学校按照花括号{}里面的计算进行排名.

  4. 哈哈,真是天罗地网。我觉得逻辑思维能力不强的人,也不适合编程,也许他的程序能运行出正确的结果,但花费的时间可以是人家的若干倍,而且这样的程序出错误的机会大大增加。

  5. 我不是搞电脑的,但也学过一点编程,我来翻译一下这个程序:

    首先,有五个学校的总分,编程人把这五个学校的分数按照从高到低的顺序放在了五个罐子里,由于电脑编程常常从0数起,所以这五个罐子分别为罐0,罐1,罐2,罐3,罐4。由于是按分数高低排列的,所以罐0里的分数是最高的,罐4最低。

    下面开始翻译这段程序:

    从第一个学校到第五个学校,给我把分数一个一个拿出来处理

    如果某校的分数与罐0的分数一样,那么该校排第一。

    如果某校的分数与罐1的分数一样,而罐1的分数不等于罐0的分数,那么该校排第二。

    如果某校的分数与罐1的分数一样,而罐1的分数与罐0的分数一样,那么该校排第一。

    如果某校的分数与罐2的分数一样,而罐2的分数不等于罐1的分数,那么该校排第三。

    如果某校的分数与罐2的分数一样,而罐2的分数等于罐1 的分数,且罐1的分数等于罐0的分数,那么该校排第一。

    (以下思路一样,从略)

  6. 学电脑的人,认为这个排序应该怎么效率最高?

  7. 如果才5个学校排名,何须程序,眼睛看一下排名结果就出来了。。。。
    如果有n个学校排名,再这么天罗地网一下,估计光相似而重复的代码就够写上一年半载的,出错的概率自然也大大提高。
    排序的方法已经很多,根据自己的喜好或者复杂读选择一个把个校的总分排序一下。。假设分数从高到低排序。
    然后再决定这个rank就简单多了,根据这个天罗地网法的结果,第一个学校就是一级,第二个学校,若和前面的分数一样,也是一级,否则二级。第i个学校,若和前面那个学校的分数一样,就使用前面那个学校的等级,school[i].rank=school[i-1].rank,,,若和前面那个学校的分数不一样,就看这个总分排在第几位,school[i].rank=i+1,,(因为i是从0开始,等级却从1开始)。。。

  8. 回复“小鱼子”:

    你说“根据这个天罗地网法的结果,第一个学校就是一级”

    ——这话有问题,这个天罗地网排序法并没说“第一个学校”就是一级,而是说跟a[0]里分数一样的学校是一级。

  9. 回复“艾米”:
    因为我的算法把学校总分先排序了,,天罗地网的算法并没有对总分进行排序。。
    原先放在第一位的学校,排序后不一定在第一位了。

  10. 还是我这个外行来瞎编一个程:

    先把学校按分数从高到低排列。

    用一个罐子装最近处理的分数,另一个罐子装最近设定的名次,分数罐子里先装最高分数,名词罐子里先装“1”。

    从第一到第五个学校(按分数排序了的),给我一个一个处理。

    如果该校分数与罐子里的分数一样,那么名次与罐子里的名次一样,如果该校分数与罐子里的分数不一样,那么名词比罐子里的名词后一名。

    把刚才处理的分数装进分数罐子,把刚才排到的名次装进名次罐子。

    用一个实例来测试:

    一到五个学校的分数分别是 80,90, 95, 95, 100

    排序之后变成校5,校4,校3, 校2, 校1

    分数罐子里装的是100, 名词罐子里装的是1。

    开始给五个学校排序:

    先拿出校5的分数,是100, 与罐子里装的分数一样,所以名次跟罐子里装的名次一样,第一名。

    再拿出校4的分数,是95,分数跟罐子里的分数不一定,那么名次比罐子里的名词后一名,即第二。

    把95 装进分数罐子,把名次2 装进名次罐子。

    ……

    搞定!

  11. 回复小鱼子:

    但你说的是“根据天罗地网排序法”,所以艾米的批评没错。你再回头看看。

  12. 回复艾友友:
    我说的是 “根据这个天罗地网法的结果”,,,
    天罗地网的算法并没有对school[i].total_score进行排序,,所以经过排序后的装在school[0]所对应的学校名,很有可能已经不是原先的school[0],,正如你的算法经过排序后,第一个学校是校5,而不是原先的校1。

  13. 回复“小鱼子”:

    我觉得你还是没弄清楚。你可以再看看这个“天罗地网法”。

    a是排了序的,但school并没排序,如果school本身按分数排了序,那么school的顺序就跟a的顺序一样,就用不着a,也用不着将学校分数对照a里的分数检验了。

    我给的方法,是将school按分数排序,你给的方法,也是将school按分数排序,但天罗地网法不是将school按分数排序,而是将分数放在a里排序,所以艾米说你的说法有问题。

  14. 回复“小鱼子”:

    如果你说的“根据天罗地网法的结果”的意思是先用天罗地网法排出顺序,再用你的方法决定名次,那就更搞笑了。

    天罗地网法就已经很繁琐了,在天罗地网法的基础上再加上你的排名次方法,不就更繁琐了吗?

    我没一步一步查看,但我觉得当天罗地网法运行完毕,学校名次就应该排出来了,不用在它的“结果”上再做什么,因为这个程序的搞笑之处是它的繁琐,而不是有bug。

  15. 艾米不是电脑专业的,但她也学过编程,据黄颜说,她天生有编程基因,debug的功夫比很多电脑专业的都强。

    如果是用汉语来解释编程,那么她debug的功夫就更强,因为汉语是她的专长。

    小鱼子可能是学电脑的,如果按自己的思路写出一段code来,可能没什么问题,但用汉语表达出来,这个“根据这个天罗地网法的结果,第一个学校就是一级”明显有错误。

    天罗地网法只给school[i].rank设了一个值,并没移动school[i]的位置,也就是说,没将第一名学校排到school[0]的位置上去。

  16. 谢谢艾友友!
    没有想到自己的中文也那么差,我以为 “根据天罗地网法的结果”的意思是 “就是让每个学校最后得到的rank的结果达到和天罗地网法一样的结果”。

  17. 回复“小鱼子”:

    我觉得你不(仅)是汉语表达问题,而是code没读明白的问题。

    艾友友已经替你指出了,天罗地网法只将每个学校的rank赋了一个值(school[i].rank=1),但并没将学校按rank排序(没有school[i]=school[1]这样的code),所以天罗地网法运行完毕之后,school这个array仍然是按原来顺序排列的,比如原来第五名放在array的第一个位置上,那么现在仍然在第一个位置上,但它的rank variable的值是“5”。

    所以你说的“第一个school就是第一名”是不对的。

    你可以把天罗地网法的code放到电脑上运行一下,看是不是这样。当然你不能自己加几行code再运行,那就是另一回事了。

发言的人请给自己一个比较好辨识(也比较固定的)ID,凡是没名字的,我就删掉了。