[英]Coin Change C++
我試圖以一種計算硬幣找零問題的方式來計算可使用的最小硬幣數。 我使用了http://www.algorithmist.com上的算法帖子。 這是算法:
C(N,m) = min(C(N,m - 1),C(N - Sm,m) + 1)
with the base cases:
C(N,m) = 1,N = 0
C(N,m) = 0,N < 0
C(N, m) = 0, N >= 1, m <= 0
但是,當我編寫代碼時,它會無限運行。
這是代碼:
#include <iostream>
#include <algorithm>
using namespace std;
int Types[101];
int Coins(int N, int m)
{
if(N==0)
{
return 1;
}
else if(N<0)
{
return 0;
}
else if(N>0 && m<=0)
{
return 0;
}
else
{
int a = Coins(N,m-1);
int b = Coins(N-Types[m],m) + 1;
int c = min(a,b);
return c;
}
}
int main()
{
int noOfCoins, Target;
cin >> noOfCoins >> Target;
for(int i = 0; i<noOfCoins; i++)
{
cin >> Types[i];
}
cout << Coins(Target, noOfCoins);
return 0;
}
有什么事嗎
應該是cout << Coins(Target, noOfCoins - 1);
而不是cout << Coins(Target, noOfCoins);
否則,您將訪問0
元素,並在此處一次又一次地進入相同狀態:
int b = Coins(N-Types[m],m) + 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.