パズル万華鏡

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

コイン支払い問題(1)の考察

 コイン支払い問題(1)の考察を示します。

(考察)問題(1)を解くBasicプログラム

Public A(100): ' コインの金額。
Public B(100): ' コインの最大個数。
Public X(100): ' 解。
Public COUNT:  ' 解の個数。
Public KIND:   ' コインの種類。
Public M:      ' 指定金額。
'
' 初期設定。
KIND=3
A(1)=100: A(2)=50: A(3)=10
B(1)=2: B(2)=4: B(3)=5
M=250
'
Call Gen(1,0)
End
'
Sub Gen(K,SUM)
  If K > KIND Then
    If SUM = M Then
      COUNT=COUNT+1
      Print Using"#####: ";COUNT;
      For J=1 To KIND
        Print Using"#####円 ##個";A(J);X(J);
      Next J
      Print
    End If
    Exit Sub
  End If  
  '
  For I=0 To B(K)
    X(K)=I
    If SUM+A(K)*X(K) > M Then Exit For
    Call Gen(K+1,SUM+A(K)*X(K))
  Next I
End Sub

実行結果

1: 100円 0個 50円 4個 10円 5個
2: 100円 1個 50円 2個 10円 5個
3: 100円 1個 50円 3個 10円 0個
4: 100円 2個 50円 0個 10円 5個
5: 100円 2個 50円 1個 10円 0個
OK
f:id:isemba:20180709150551j:plain