PRINT PRINT "500を1個まで 200を1個まで 100を2個まで" PRINT " 50を1個まで  20を1個まで  10を2個まで" PRINT " 5を1個まで  2を2個まで  1を1個まで  使って合計する。" PRINT "その合計で 1 〜 1000 のすべての自然数を作れるか?" PRINT LET q=0 LET w=0 DIM y(1728) FOR x1=0 TO 1 FOR x2=0 TO 2 FOR x3=0 TO 1 FOR x4=0 TO 2 FOR x5=0 TO 1 FOR x6=0 TO 1 FOR x7=0 TO 2 FOR x8=0 TO 1 FOR x9=0 TO 1 LET q = q + 1 LET y(q)= 1*x1 + 2*x2 + 5*x3 + 10*x4 + 20*x5 + 50*x6 + 100*x7 + 200*x8 + 500*x9 NEXT x9 NEXT x8 NEXT x7 NEXT x6 NEXT x5 NEXT x4 NEXT x3 NEXT x2 NEXT x1 CALL sort(y,q) FOR i=2 TO q IF y(i)-y(i-1) > 1 THEN PRINT "作れない自然数あり" END IF IF y(i)-y(i-1) > 0 THEN PRINT USING "#####":y(i); LET w = w + 1 IF INT(w/10)=w/10 THEN PRINT PRINT END IF END IF NEXT i PRINT PRINT "この方法では、たとえば20を作るのに3とおりあります。" PRINT "  20 = 20*1" PRINT "  20 = 10*2" PRINT "  20 = 10*1 + 5*1 + 2*2 + 1*1" END EXTERNAL SUB sort(a(),m) FOR i=1 TO m-1 FOR j=i+1 TO m IF a(i)>a(j) THEN LET t=a(j) LET a(j)=a(i) LET a(i)=t END IF NEXT j NEXT i END SUB