challenge 水の移し替えパズル

A, B, Cの容器があり,それぞれ水が4L, 2L, 10L入っている. ここで次の操作を繰り返す.

(*)「A, B, Cのどれか二つの容器から水を1Lずつくみ上げ,残りの容器に移す.」

たとえばA, Bから1Lずつくみ上げて移せばA=3L, B=1L, C=12Lとなる. くみ上げる前の容器には必ず水が入っているとする.

(*)を繰り返してどれか一つの容器にのみ水がはいっている状態にする最小手数を求めよ.

可能ならA=827392L,B=65536L,C=122880Lのときも求めよ.


このお題は光成さんの投稿を元に作成しました。ご協力ありがとうございます。

Posted feedbacks - C#

#3621を実装。 早解き競争しないんだったらつまんなさすぎ。

てか、対訳マルチリンガル・クックブックを目指すというどう書く.orgの開設理念がなければこんなコードを投稿しねえ。

1
2
3
4
5
6
7
static int Solve(int a, int b, int c)
{
  Func<int, int, int> f
    = (x, y) => ((x - y) % 3 == 0 ? (x > y ? x : y) : int.MaxValue);
  int r = (new int[] { f(a, b), f(b, c), f(c, a) }).Min();
  return r < int.MaxValue ? r : 0;
}

Index

Feed

Other

Link

Pathtraq

loading...