不思議な掛算問題(2)の解答例を示します。
問題(2)の解
●プログラム(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
実行結果