パズル万華鏡

面白いパズルの紹介と解説をします。

不思議な掛算問題(2)の解

 不思議な掛算問題(2)の解答例を示します。

問題(2)の解
f:id:isemba:20151003112414j:plain
プログラム(MM111.bas)

' << MM111.bas >>
' Tiny Basic
'
Dim A(9): ' A(J)=0は、左辺で数字Jが出現していないことを意味し、
          ' A(J)=1は、左辺で数字Jが出現したことを意味する。
Dim B(9): ' 作業用配列。
'
' 4桁の整数について解の探索。
COUNT=0: ' 解の個数。
For N=1000 To 9999
  ' 初期設定。
  For J=0 To 9: A(J)=0: Next J 
  '
  S=N
  ' 変数Sの値を各桁に分解していく。数字に重複があればスキップ。
  While S > 0 
    W=S Mod 10: 
    If A(W) > 0 Then Goto *Lab
    A(W)=A(W)+1: S=Int(S/10)
  Wend
  '
  ' 変数Nの値をタイプ(□×□□□)に分解する。
  T1=Int(N/1000): T2=N Mod 1000
  For J=0 To 9: B(J)=A(J): Next J
  '
  T=T1*T2
  ' 変数Tの値を各桁に分解していく。
  L=0
  While T > 0 
    W=T Mod 10
    If B(W) = 0 Then Exit Do
    B(W)=B(W)-1
    T=Int(T/10)
    L=L+1
  Wend
  '
  ' 解の表示。
  If L = 4 Then
    COUNT=COUNT+1
    Print Using"(####) ";COUNT;
    Print Using"#×###=####";T1;T2;T1*T2
  End If
  '
  ' 変数Iの値をタイプ(□□×□□)に分解する。
  T1=Int(N/100): T2=N Mod 100
  For J=0 To 9: B(J)=A(J): Next J
  '
  T=T1*T2
  ' 変数Tの値を各桁に分解していく。
  L=0
  While T > 0 
    W=T Mod 10
    If B(W) = 0 Then Exit Do
    B(W)=B(W)-1
    T=Int(T/10)
    L=L+1
  Wend
  '
  ' 解の表示。
  If L = 4 Then
    If T1 <= T2 Then
      COUNT=COUNT+1
      Print Using"(####) ";COUNT;
      Print Using"##×##=####";T1;T2;T1*T2
    End If
  End If
*Lab
Next N
End

実行結果
f:id:isemba:20151003112543j:plain
f:id:isemba:20151003112558j:plain