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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM