保證在每次選擇極端值進行運算後,能得到最佳解。
優點為複雜度低,程式碼簡單
缺點為不一定正確
題目概念:
再買東西時要找k元,請問最少要找多少銅板
解法:
每次都將最接近的銅板納入計算後再找下一個,直到達成目標。
題目:
在銀行提款時,常常會拿到以最少紙鈔、硬幣組成的現金
要怎麼才能 n 元以最少的紙鈔、硬幣組成呢?
新台幣常用的紙鈔、硬幣有以下幾種:
1元
5元
10元
50元
100元
500元
1000元
input
552
1246
10000
output
552=500*1 50*1 1*2
1246=1000*1 100*2 10*4 5*1 1*1
10000=1000*10
解法
#include<iostream>
using namespace std;
int main()
{
int money[7]={1000,500,200,100,50,10,5,1};
int n, i;
while( cin >> n )
{
cout << n << "=";
for( i=0 ; i<=6 ; i++ )
{
if( n >= money[i] )
{
cout << money[i] << "*" << n/money[i] << " ";
n = n%money[i];
}
}
cout << endl;
}
return 0;
}
註解:
某個錢幣所需個數即是該數除以目標之商