知恵袋で見つけた数的推理のテストの得点差の問題をPythonで解いてみました。(^_^;
A~Eの五人が100点満点のテストを受けた結果について次のことがわかっている。
(ア) AとBの得点差は16
(イ) BとCの得点差は33
(ウ) CとDの得点差は25
(エ) DとEの得点差は37
(オ) EとAの得点差は29
Dの得点がこの五人の平均点52.4より低いときBの得点はいくつか?
aを仮平均として、その相対値をra(=0)~re(=e-a)としました。
得点差の条件から相対値を求めて、仮平均と平均値の公式から、仮平均aを求め、その相対値からb他の値を求めました。
必要ありませんが参考までに、ランキング表も付けておきました。
●仮平均と平均値の公式
● PointDiff2.py
# coding: UTF-8 # PointDiff2.py from time import time import itertools # a[]の中で n 番目に大きな数値を取得する def Large(a,n): m = len(a) b = sorted(a) if(n< 1 or m< n): n=1 # n が範囲外の時は、n=1 return b[m-n] # a[]に先頭からA~Eと名前をつけて、n 番目に大きいものの名前を取得する def getNameOfLarge(a,n): NAME = "ABCDE" return NAME[a.index(Large(a,n))] # a[]に先頭からA~Eと名前をつけて、大きい順に名前を並べた文字列を返す def getRanking(a): n = len(a) s = '' for i in range(n): s+=getNameOfLarge(a,i+1) return s def main(): tm = time() # Timer Start AB,BC,CD,DE,EA = 16,33,25,37,29 # 得点差 M = 52.4 # 平均値 ra = 0 # raを0(aを仮平均)として、rb~reの相対値を調べる。 for rb in (ra-AB,ra+AB): # 条件ア for rc in (rb-BC,rb+BC): # 条件イ for rd in (rc-CD,rc+CD): # 条件ウ for re in (rd-DE,rd+DE): # 条件エ if abs(ra-re)!=EA: continue # 条件オ n = (ra,rb,rc,rd,re) a = M-sum(n)/5 # 仮平均と平均値の公式から m = (a,b,c,d,e) = (ra+a,rb+a,rc+a,rd+a,re+a) if not d< M: continue pass # チェックを潜り抜けたものだけを表示 print(m) print('%s : %s'%(getRanking(n), sorted(m,reverse=True))) print(u"∴%g"%b) print("Runtime : %.3f [sec]"%(time()-tm)) # Timer Stop & Disp if __name__ == '__main__': main()
●実行結果
(48.0, 32.0, 65.0, 40.0, 77.0) ECADB : [77.0, 65.0, 48.0, 40.0, 32.0] ∴32 Runtime : 0.000 [sec]
※参考URL
●平均値と仮平均の利用 - 高校数学.net
●判断推理の身長差の問題をJavaで解いてみた。 - rscのブログ
●判断推理のテストの得点差の問題をPythonで解いてみた。 - rscのブログ