数的推理の整数の不定方程式の応用問題をPythonで解いてみた。

 数的推理の整数の不定方程式の応用問題Pythonで解いてみました。(^_^;

 ある高校の事務部門には、教務課、生徒課、総務課の3課があり、課長3人、課員27人の計30人の職員がいる。
課員の数が最も多いのが教務課で、総務課が最も少ない。
女性職員は教務課は4人、生徒課2人、総務課7人であるが、女性の課長はいない。
また、男性の課員のいない課はない。
 以上のことからいえることとして正しいのはどれか。

1 教務課の総数は課長以下13人である。
2 教務課の男性は生徒課より多い。
3 生徒課の男性の課員は7人である。
4 総務課の男性の課員の数は偶数である。
5 この高校の男性の事務員は20人以上いる。

 数学的に解けば、教務課、生徒課、総務課の男性の課員数をそれぞれ、x[人]、y[人]、z[人]として、教務課、生徒課、総務課の課員数をそれぞれ、X[人]、Y[人]、Z[人]とすると、題意から、



 X+Y+Z=27 …①
 X>Y>Z …②
 X=x+4, Y=y+2, Z=z+7 …③
 x,y,z>0 …④

①,②から、
 3Z<X+Y+Z=27
∴Z<9 …⑤
③,④から、
 X>4, Y>2, Z>7 …⑥
⑤,⑥から、
 7<Z<9
∴Zは整数だから、Z=8 …⑦
①,⑦から、
 X+Y+8=27
∴X+Y=19 …⑧
②,⑧から、
 2Y<X+Y=19
∴Y<19/2=9.5 …⑨
②,⑦から、
 X>Y>8 …⑩
⑨,⑩から、
 8<Y<9.5
∴Yは整数だから、Y=9 …⑪
⑧,⑪から、
 X+9=19
∴X=10 …⑫
③,⑦,⑪,⑫から、
 X=x+4=10, Y=y+2=9, Z=z+7=8
∴(x,y,z)=(6,7,1)

 以下省略。(^_^;
 プログラムを作って検算すると、次の通りです。

● IndeterminateEq1.py

# coding: UTF-8
# IndeterminateEq1.py

from time import time

def main():
    tm = time()  # Timer Start
    ch = [False]*5
    cnt = 0
    for x in range(1,27):           # 教務課の男性の課員数
        for y in range(1,27):       # 生徒課  〃
            for z in range(1,27):   # 総務課  〃
                X,Y,Z = x+4,y+2,z+7 # 教務課、生徒課、総務課の課員数
                if X+Y+Z!=27:    continue
                if not(X> Y> Z): continue
                # チェックを潜り抜けたものだけを表示
                cnt+=1
                print('(x,y,z)=(%d,%d,%d)'%(x,y,z))
                # 選択肢のチェック
                if cnt==1: ch = [True]*5
                ch[0] &= (X+1==13)
                ch[1] &= (x> y)
                ch[2] &= (y==7)
                ch[3] &= (z%2==0)
                ch[4] &= (x+y+z+3>=20)

    s = ""
    for c in ch:
        if c : s+=" %s"%(ch.index(c)+1)
    print(u"∴%s"%s)
    print("Runtime : %.3f [sec]"%(time()-tm))   # Timer Stop & Disp

if __name__ == '__main__':
    main()

●実行結果

(x,y,z)=(6,7,1)
∴ 3
Runtime : 0.026 [sec]

※参考URL
知恵袋の数的推理の不等式の応用問題をPythonで解いてみた。 - rscの日記