朝日新聞2005年5月13日のパズル横丁問題

問題

6,4,9,1,3の5つの数字を使って以下の式を完成する。=の左側,右側でそれぞれ1つずつの数字を使うこと。

□□□×□□7=□□□□□

解答への道(ヒント)

そういえば今日は13日の金曜日。

別にどうってことはないけどね。ただそれだけ。

何故1,3,4,6,9でないのかと思ったら,6,4,9,1,3で虫食い算ということだ。

前週に続き今回も数字の割り当て問題を利用可能。数字の数は5種類しかないので,a〜eまでを取り出して使用する。

  for( int a=0; a< 5; a++) {
    used[a] = YES;
    for( int b=0; b< 5; b++) {
      if( used[b]) continue;
      used[b] = YES;
      for( int c=0; c< 5; c++) {
        if( used[c]) continue;
        used[c] = YES;
        for( int d=0; d< 5; d++) {
          if( used[d]) continue;
          used[d] = YES;
          for( int e=0; e< 5; e++) {
            if( used[e]) continue;
            // ここで式が成立するかどうか調べる。
          }
          used[d] = NO;
        }
        used[c] = NO;
      }
      used[b] = NO;
    }
    used[a] = NO;
  }

ファイルの頭で以下のように配列を定義しておく。

int num[] = { 6, 4, 9, 1, 3};

こうすれば式の左は以下のように計算できる。

int n = (num[a] * 100 + num[b] * 10 + num[c]) * (num[d] * 100 + num[e] * 10 + 7);

この計算結果が6,4,9,1,3を1つずつ使っていることを確認する関数を作れば完成。

答えは1件出力されました。

解速度