Project1

标题: 【此贴作废】汗b- -今天学了平均数中位数众数,于是发个代 [打印本页]

作者: end55rpg    时间: 2012-5-22 22:33
标题: 【此贴作废】汗b- -今天学了平均数中位数众数,于是发个代
本帖最后由 end55rpg 于 2012-5-26 01:17 编辑

练习册的题计算量太坑爹了,EXCEL也用不来,就计算器,,TMD一个LJ!于是写了个方法查询这3数据!
算法很坑爹,欢迎改进,欢迎发出更简洁代码= =!
  1. def tongji(a)
  2.   eval "a = %w(#{a})"
  3.   sum=0
  4.   hash = {}
  5.   a.each{|n|hash[n] = hash[n].to_i + 1}
  6.   a.each{|n|sum+=n.to_i}
  7.   win = {nil=>0}
  8.   p hash
  9.   hash.each{|key, value| value.to_i >= win.values[0] ? win = {key=>value} : win}
  10.   
  11.   array = a.sort!{|aa,bb|aa.to_i<=>bb.to_i}
  12.   id = (-1)**array.size == -1 ? array.size/2 : (array.size+1)/2
  13.   if (-1)**array.size == -1
  14.     median = (array[id] + array[id+1]) / 2
  15.   else
  16.     median = array[id]
  17.   end
  18.   p "众数:"
  19.   p win
  20.   p "平均数: #{(sum / a.size)}"
  21.   p"中位数:"
  22.   p median
  23. end
  24. tongji("85 81 89 81 72 82 77 81 79 83")#测试
复制代码
统计 tongji()方法调用,传入那个类似于%w(data)建数组就行了= =!
比如tongji("1 2 3 -2 -1 0")

结果:
/n众数:31/n平均数: 0/n中位数:1
作者: end55rpg    时间: 2012-5-22 22:39
测试:
  1. string = ""
  2. 1000.times{string += "#{rand(1000)} "}
  3. tongji(string)
复制代码

结果1:
  1. 03455689910101114141516182021212122222424252626293132323233333636363639393939414545474848495050535353545657576264656667686868717172737375767879808283858787909091929494959596969797989999100101101102103103106106107108109110111113113113114114115117117117122122123125125127128129130131131132132133134135136136140141142145145146146146147148148149151152152152152152154154155155157157157159160160161163163163164166166168168168171171171171172172173175175178178178179179179180181184184188188191191191192193194195197199199199200201203203204204204205206208208210211215219220221221223224225225225226226228229233236236237237238239239240240241241242244247248248249250253253254254255256256259259260261261264264264265268269270270272272273273274274275275279281282284284285286286288288288289289290290291292292294295295296297302303305306306308308309309309309310315315316317318318320320323329330334335335336336337337337338338338344344345346347347348349350351352352352355355356357357358360361362366367367368371372373377377377378379380381383383383385387388388390391392392396399399399399400400401403404407408408408409410410410411414414414415415415415416416418418419419420420421421423423424425427430430432434436437437438438439439440440442442443443444445445446447447448448449449449452453455455456456459459462462463464465465467469470470472472474475476477478478479481482483484484485487488491491492492493494495496496497498498498499499499500500502504505508508508509510511512513513514514514520520522522523523523528528530530532533533534534535535536539540543543543544544544545545546547547548549551552553554554554556558558561561562562564565566570570571571572573574574574575576577577577579579580581581583583583583584584587588589590591593593595595595597597598599601602603605605607607607610611611612614615615615616617618618620620620622624624625626627631631632635635637638639641641643644645645647647649650652652654654656657660661661662665666668668674675681683684689690690690692692693694696697697697699699699701701701702703703704705705705707708710710713713714714715716718718719720720721721722722723724725726727728729732732732735735736736737738739740741744744744745745747749750753755755756756757758759760761761761762764764764767767768771771772775776777777778781781782782783786788788788790791791792793793793794794795795797797797798798800800800800803805805806807808809809809810810810811811813814814818819820821824826827827829830832833834834835835838839840840842842845846846846847849851851851852853854856856856857859861861862863864864865865867867871872872873874875876876877878878880881881881883883884884885886886889892892893893894895895896896898899899901901903905908910911911914915915915916918918918919922924924925925927927927928928928930931932933935936940941941943943943944944945947948949950950951951952952954954955956956957957957958958958960965965965967968974976976977977978978980981982982982983989989989990990994995995995997998999999
复制代码


真正结果:

  1. 众数:1525/n
  2. 平均数: 498/n
  3. 中位数:498/n
复制代码



作者: orzfly    时间: 2012-5-22 22:58
假设数在G5:G11
平均数 =average(g5:g11)
众数=LARGE(IF(COUNTIF(G5:G11,G5:G11)=MAX(COUNTIF(G5:G11,G5:G11)),G5:G11,0),2)
中位数=MEDIAN(G5:G11)
方差=SUM((G5:G11-AVERAGE(G5:G11))^2)/COUNT(G5:G11)
极差=max(g5:g11)-min(g5:g11)
其中 众数和方差的公式,请按CTRL+回车结束,其他的,直接回车结束就可以了
并且G5:g11的范围可根据你表中,数据所在范围改写。
http://zhidao.baidu.com/question/351902016.html
作者: orzfly    时间: 2012-5-22 23:01
  1.   hash = {}
  2.   a.each{|n|hash[n] = hash[n].to_i + 1}
  3.   a.each{|n|sum+=n.to_i}
复制代码
我敢写成

  1. hash = a.group_by{|i| i}
  2. hash.keys.each {|k| hash[k] = hash[k].length }
  3. sum = a.inject &:+
复制代码
need Ruby 1.9+ (RPG Maker VX Ace)
作者: 飞3a    时间: 2012-5-22 23:46
- -学校教的貌似就是楼主写的那样。。。。数字扔进数组然后开始算- -你可以考虑参加acm啊。。。那个是专门弄算法的。
作者: dabojun    时间: 2012-5-23 08:42
楼主啊,这个怎么应用到游戏中呢?貌似很厉害
作者: 真空包装    时间: 2012-5-24 19:02
看不懂- -

作者: end55rpg    时间: 2012-5-25 21:19
真空包装 发表于 2012-5-24 19:02
看不懂- -

aaaaaaaa= =!
welcome




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1