1. 程式人生 > >C++實現最少硬幣兌換問題

C++實現最少硬幣兌換問題

#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]; }