数学って面白い!

ご無沙汰しております。マリアです。今回の投稿のきっかけはエンジニアの友達の転職活動です。友達の数学と情報工学の面接問題を聞いて数学って本当に面白いなと改めて分かりました。そこで皆さんにも数学と情報工学の面白さをシェアしたいと思いました。また、もしどなたかの面接にこの投稿が役に立てば幸いです。

それでは、スタートとし非常に簡単な課題をやってみましょう。

 

問題1。

3つ目の変数を使わずに2つの変数を置き換えてください。

 

解答1。

簡単な数学的モデルを考えてみます。ある変数をaとbとした場合、それぞれの値はa’とb’になります。そのときa’とb’の差をΔとします。b’>a’のとき、それぞれの数直線上に表せば下記のようになります。

変数bの値をΔとするとa+Δ=b’となります。

b’はaに保存すればb=Δとa=b’のです。b=a’にするためにb’からΔを引く必要があります。解答整理するために、 プログラミング言語のPythonを使って表わしました。

 

# 例:b=9, a=6
b=b-a  #b=3
a=a+b #a=9
b=a-b  #b=6 できた!

いかがでしたか?それでは続いて問題2をやってみましょう。

問題2。

足し算しか使わずに整数の引き算、掛け算、割り算の関数を作ってください。

解答2。

難しそうですね。慌てずにゆっくり考えてみましょう。

引き算

引き算とは反数との足し算であることです。つまり、a-b=a+(-1)*bになっています。

しかし、条件により掛け算を使用してはいけないですので、反数を計算する関数を作成してみます。

def negate(a):
   n = 0
   d = 1 if a < 0 else -1
   while a:
      n+=d
      a+=d
   return n

それができてから引き算もできるはずです。

def subtract(a, b):
   return a+negate(b)

掛け算

皆さんが小学校で学んだように掛け算は足し算の倍数です。

整数の場合は負の数も入っていますので、それに対処できるように絶対値を計算する関数を作成しましょう。 なぜかというと、負の数の掛け算は正の数になるからです。

def absolute(a):
    return a if a >  0 else negate(a)  


def multiply(a, b):
    if a < b: #計算スピードの最適化 
       return multiply(b,a) 

    s = 0 
    for i in range(absolute(b)): 
        s +=a 
    return s if b>0 else negate(s)

割り算

一番難しいところに辿り着きました。課題のモデルを作ってみたら、x=a/bにしたら、a=b*xと言えます。つまり、xはaになるまでのbの足し算の回数です。掛け算もできていますので、問題は解けそうになりました。

def divide(a, b):
    if b == 0:
       raise Exception

    aabs=absolute(a)
    babs=absolute(a)

    prod =0
    x=0
    while prod + absb <= absa:
        product += absb
        x++

    return x if (a < 0 && b < 0) || (a > 0 && b > 0) else negate(x)

残念ながら剰余がわからないですが、整数の割り算はできています。

 

最後に確率論の問題を解決してみましょう。

問題3。

車の通りが少ない道は車が30分内に通過する確率は0.95確率です。同じ道を車で10分以内に通過する確率は?

解答3。

求める値をxとします。

答えがすぐ分からないですが 少しずつ推理してみましょう。

逆に道を10分以内に通過する車が一台もない確率数式で表わすと1−xとなります。

30分以内に通過する車が一台もない確率は10分ずつの3回です。    (1-x)3 =0.05。

この数式からすると、x=1-∛0.05. 電卓で計算してみれば、答えは0.63になります。