C++實現最少硬幣兌換問題
阿新 • • 發佈:2019-01-22
#include<iostream> #include<fstream> using namespace std; int n,L; //n種硬幣L長的陣列 int c[13][20]; int T[13];//硬幣面值 int jisuan(int i,int j); int main() { fstream file("2.1_input.txt"); //這是需要讀取資料的檔案的路徑。 fstream file2("2.1_output.txt"); //這是需要輸出資料的檔案的路徑。 if(file.fail() || file2.fail()) { cout<<"The file open error!"<<endl; } else { file>>n; for(int i=1;i<=n;i++) { file>>T[i]; } file>>L; } int k; k=jisuan(n,L); file2<<k<<endl; return 0; }int jisuan(int i,int j) { int min; if((i==0)||(j==0)) c[i][j]=0; if(i==1) { if(((1<=j)&&(j<T[1]))||((T[1]<=j)&&(j<=L)&&(j%T[1]!=0))) c[i][j]=500; if((T[i]<=j)&&(j<=L)&&(j%T[i]==0)) c[i][j]=j/T[i]; } else { min=jisuan(i-1,j); for(int x=j/T[i];x>0;x--) { int a=jisuan(i-1,j-x*T[i])+x; if(min>a) min=a; } c[i][j]=min; } return c[i][j]; }