给你一定的钱,(如64块)找零钱,只能在(25,10,5,1,这些硬币面值当中找),如果找的出(当然这里都可以找的出),就求出一共最少需要几枚硬币(就是最优值)! 下面的程序(当然是用动态规划算法实现)可以找的出最少需要几枚硬币!!! 下面是代码,大家往下看!!! #include<iostream> #include<stdlib.h> using namespace std ; void coin(int n , int m , int a[] , int c[]) ; void coin(int n , int m , int a[] , int c[]) // n为硬币面值的个数,m为要你找的钱,a数组是存放各 个硬币面值! { c[0] = 0 ; for(int i=1 ; i<=m ; i++) { int min = m ; for(int j=1 ; j<=n ; j++) / { if(i>=a[j] && c[i-a[j]] < min) min = c[i-a[j]] ; } c[i] = min + 1 ; } }
int main() { int a[]={0 , 25 , 10 , 5 , 1} ; int c[65]={0} ; int b=64 ; coin(4 , 64 , a , c) ; cout << "最优解就是最少值为:" << c[64] << endl ; for(int i=0 ; i<65 ; i++) cout << c[i] << " " ; system("pause") ; }//(这个算法能找出最优值,结果为7) 问题1是: 谁能在这基础上在修改一下,能知道输出结果的值,分别来自哪几个硬币面值! 如找64块钱的零钱,结果是输出7!! 要求知道结果这7来自25(2枚),10(1枚),5(0枚),1(4枚)! 各位大虾帮一下忙,在这基础上改进一下!!!! 问题2是:如果遇到找开的情况怎么办?(如要3块钱的零钱,在(25,10,5,2)) 编程实现!! (表达的不好,但是如果知道动态规划算法,都应该明白!) 高手帮忙!!!!!!