Translate

2013年1月31日木曜日

最大整数関数の応用問題(3)

今回の方が簡単かもしれません。

実数xを超えない最大の整数を[x]と表すことにする。

nを正整数とする。最大整数関数を応用して、次のような出力が得られる関数f(n)を作ってください。
nが偶数のとき、f(n)=n
nが奇数のとき、f(n)=n-1

実は、最大整数関数を使わずに作ることもできます。

1 件のコメント:

  1. 問題の答えです。

    偶数と奇数の違いは、2で割り切れるか、2で割って1余るかの違いです。

    その違いを検出するために、n/2を考えてみる。

    偶数の場合:n = 2k, 奇数の場合:n = 2m + 1とすると、

    n/2 = k(n:偶数) または m + 1/2(n:奇数)

    ここで、床関数を施すと、

    [n/2] = k(n:偶数) または m(n:奇数)

    ここで、奇数の2で割った余りの部分であった1/2が床関数によって消えている。偶数の場合に変化の無いように、2倍すると、

    2[n/2] = 2k(n:偶数) または 2m(n:奇数)

    つまり、

    2[n/2] = n(n:偶数) または n - 1(n:奇数)

    となり、f(n) = 2[n/2]とすれば、目的の出力が得られる。

    返信削除