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

posted @ 2017-04-05 09:09  fcyh  阅读(2328)  评论(0编辑  收藏  举报