!自然数Nを分割する(並びの順序は区別しない) !例 N=10の場合 ! 10、1+9、2+8、1+1+8、… PUBLIC NUMERIC C ! 解の数 LET C=0 LET N=10 DIM M(0 TO N-1) MAT M=ZER PRINT PRINT "No. 0" PRINT " L(0) L(1) L(2)・・・L(8) L(9)" PRINT " 0 0 0 ・・・ 0 0" CALL search(0,0,M,N) END EXTERNAL SUB search(p,s,L(),x) ! バックトラック法で検索する IF p=0 THEN LET t=1 ELSE LET t=L(p-1) END IF ! 昇順 FOR i=t TO x-s ! s は、0 から (p-1)番目までの和 LET L(p)=i ! p番目を設定する PRINT " p =";p;" L(";p;") = i =";i;" ΣL(";p-1;") = s =";s IF s+i=x THEN LET C=C+1 PRINT "No.";C MAT PRINT L; ELSE CALL search(p+1,s+i,L,x) ! 次へ END IF LET L(p)=0 ! 元に戻す NEXT i END SUB