朝日新聞2005年5月13日パズル横丁解答

プログラムの実行結果は以下の通り。

1 3 9 x 4 6 7 = 64913

プログラムのソースは以下の通り。chkunique() をちょっと工夫した。

#include "puzutl.h"

YesNo used[10];

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

YesNo chkunique( int n) 
{
  int chk[] = { 1, 0, 1, 0, 0, 1, 0, 1, 1, 0};
  while( n > 0) {
    if( ++chk[n%10] > 1) return NO;
    n /= 10;
  }
  return YES;
}

int main( int argc, cstring argv[])
{
  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;
            int n = (num[a] * 100 + num[b] * 10 + num[c]) * (num[d] * 100 + num[e] * 10 + 7);
            if( chkunique( n)) {
              ps( "%d %d %d x %d %d 7 = %d\n", num[a], num[b], num[c], num[d], num[e], n);
            }
          }
          used[d] = NO;
        }
        used[c] = NO;
      }
      used[b] = NO;
    }
    used[a] = NO;
  }
  return    0;
}