硬币找零问题-贪婪法与动态规划
一,问题描述 给定一组硬币数,找出一组最少的硬币数,来找换零钱N。 这类问题由于给定的硬币面值与数量的不同,可能演化出很多种不同的版本,这里先讲最简单的两种形式。 二,贪婪法求解硬币找零问题 贪婪法的思路很简单,不断地从总找零值里减去面值最大的硬币。如果找零的值小于最大的硬币值,则尝试第二大的硬币,依次类推。 C++代码实现如下: 1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int coin_num, N; // 硬币面值数量,需要找零的钱数 8 cin>>coin_num>> N; 9 int coin[coin_num]; // 不同的硬币面值 10 for ( int i = 0 ; i < coin_num; ++ i) 11 cin>> coin[i]; 12 13 int total_num = 0 , cur_coin = coin_num - 1 ; 14 while (N!= 0 ) 15 { 16 total_num += N / coin[cur_coin]; // 从最大的硬币面额开始,从总钱数里面扣除 17 N %= coin[cur_coin]; 18 cur_coin-- ; 19 } 20 cout<<total_num<< endl; 21 }