【ACWing】653. 鈔票
題目地址:
https://www.acwing.com/problem/content/655/
鈔票的面值有 100 , 50 , 20 , 10 , 5 , 2 , 1 100,50,20,10,5,2,1 100,50,20,10,5,2,1,給定一個金額,要求用那些面值的鈔票湊出這個金額,並且使得使用的鈔票數量最小。返回湊的方案。
思路是貪心,永遠儘量優先用金額大的鈔票即可。
演算法正確性證明:
首先容易知道方案一定存在。設
N
=
100
x
1
+
50
x
2
+
20
x
3
+
10
x
4
+
5
x
5
+
2
x
6
+
x
7
N=100x_1+50x_2+20x_3+10x_4+5x_5+2x_6+x_7
程式碼如下:
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
cout << N << endl;
int c[] = {100, 50, 20, 10, 5, 2, 1};
for (int i = 0; i < sizeof c / sizeof(int); i++) {
printf("%d nota(s) de R$ %d,00\n", N / c[i], c[i]);
N %= c[i];
}
return 0;
}
時空複雜度 O ( 1 ) O(1) O(1)。