GAIさんへのお返事です。
No. 1
179
×224
-----
716
358
358
-----
40096
解析に使ったプログラムを掲載します。参考にしてください。
!虫食い算
! □□□ ← i 被乗数
! x□□□ ← j 乗数
! --------
! □□□ ← a 途中結果1
! □□□ ← b 途中結果2
!□□□ ← c 途中結果3
!----------
!□□□□□ ← d 結果
LET t0=TIME
DEF fnFIG(x,n)=MOD(INT(x/10^n),10) !n桁目の数を得る ※0:一の位、1:十の位、2:百の位、…
LET ANSWER_COUNT=0 !解答数
DIM nm(0 TO 9),nm_sav(0 TO 9) !0~9の数字の重複を確認する
FOR i=100 TO 999 !被乗数
MAT nm=ZER
FOR k=0 TO 2 !重複チェック ※2つずつ
LET t=fnFIG(i,k) !各桁の数字を得る
IF nm(t)=2 THEN GOTO 200 !既に2つある!
LET nm(t)=nm(t)+1
NEXT k
FOR j=100 TO 999 !乗数
MAT nm_sav=nm !save it
FOR k=0 TO 2 !重複チェック
LET t=fnFIG(j,k)
IF nm(t)=2 THEN GOTO 100
LET nm(t)=nm(t)+1
NEXT k
LET a=i*MOD(j,10) !乗数の一の位との積
IF a<100 OR a>999 THEN GOTO 100 !途中結果1は3桁の数?
FOR k=0 TO 2 !重複チェック
LET t=fnFIG(a,k)
IF nm(t)=2 THEN GOTO 100
LET nm(t)=nm(t)+1
NEXT k
LET b=i*MOD(INT(j/10),10) !乗数の十の位との積
IF b<100 OR b>999 THEN GOTO 100 !途中結果2は3桁の数?
FOR k=0 TO 2 !重複チェック
LET t=fnFIG(b,k)
IF nm(t)=2 THEN GOTO 100
LET nm(t)=nm(t)+1
NEXT k
LET c=i*INT(j/100) !乗数の百の位との積
IF c<100 OR c>999 THEN GOTO 100 !途中結果3は3桁の数?
FOR k=0 TO 2 !重複チェック
LET t=fnFIG(c,k)
IF nm(t)=2 THEN GOTO 100
LET nm(t)=nm(t)+1
NEXT k
LET d=i*j !被乗数*乗数=乗算結果
IF d<10000 OR d>99999 THEN GOTO 100 !結果は5桁の数?
FOR k=0 TO 4 !重複チェック
LET t=fnFIG(d,k)
IF nm(t)=2 THEN GOTO 100
LET nm(t)=nm(t)+1
NEXT k
LET ANSWER_COUNT=ANSWER_COUNT+1 !解答数
PRINT "No.";ANSWER_COUNT
PRINT USING " ###":i !結果の表示
PRINT USING "×###":j
PRINT "-----"
PRINT USING " ###":a
PRINT USING " ### ":b
PRINT USING "### ":c
PRINT "-----"
PRINT USING "#####":d
PRINT
100 !continue
MAT nm=nm_sav !restore it
NEXT j
200 !continue
NEXT i
PRINT "計算時間=";TIME-t0
END