朝日新聞2004年8月7日のパズルパーク問題

問題

1から10の数字から4回数字を選び出す。選び出した数字を掛け合わせたものと,選び出した残りの数字を足し合わせたものが等しくなった。選び出した数字を求める。

解答への道(ヒント)

選び出した数字をa,b,c,dとする。aを選び出したときの残りの数字の和は55-aとなる。

よって以下の数式を満たす組合せを求める。

a*b*c*d = (55-a) + (55-b) + (55-c) + (55-d)

同じ数字を何回使っても良いので,以下の虱潰しコードになる。

for( int a=1; a<= 10; a++) {
  for( int b=1; b<= 10; b++) {
    for( int c=1; c<= 10; c++) {
      for( int d=1; d<= 10; d++) {
        int x = a * b * c * d;
        int y = (55-a) + (55-b) + (55-c) + (55-d);
        if( x == y) 発見
      }
    }
  }
}

重複除去の処理を入れず発見したのをそのまま出力するので,a,b,c,dの4つの数字を並び替えた4!(4の階乗)件(24件)出力される。

解速度