找零钱问题c语言
时间: 2023-10-26 13:16:28 浏览: 172
好的,下面是找零钱问题的 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MAX_N 100 // 最大硬币种类数
#define MAX_Y 10000 // 最大找零钱数
int n; // 硬币种类数
int p[MAX_N]; // 硬币面值
int w[MAX_N]; // 硬币重量
int f[MAX_Y + 1]; // 找零钱方案
// 初始化
void init() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d %d", &p[i], &w[i]);
}
}
// 动态规划
void dp(int Y) {
for (int j = 1; j <= Y; j++) {
f[j] = INT_MAX;
for (int i = 1; i <= n; i++) {
if (j >= p[i]) {
f[j] = f[j] < f[j - p[i]] + w[i] ? f[j] : f[j - p[i]] + w[i];
}
}
}
}
// 输出结果
void print_result(int Y) {
if (f[Y] == INT_MAX) {
printf("No solution!\n");
} else {
printf("The minimum weight of change is: %d.\n", f[Y]);
}
}
// 主函数
int main() {
int Y;
init();
scanf("%d", &Y);
dp(Y);
print_result(Y);
return 0;
}
```
这里的代码实现了动态规划算法,通过输入硬币的面值和重量,以及找的零钱数,计算出所需的最小重量,并输出结果。
阅读全文