change coins

描述

给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1.

你可以假设每种硬币均有无数个

您在真实的面试中是否遇到过这个题?  是

样例

给出 coins = [1, 2, 5], amount = 11
返回 3 (11 = 5 + 5 + 1)
给出 coins = [2], amount = 3
返回 -1

#include <iostream>
#include<string.h>
#include<math.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N =100;
const int INF = 2147483640;
int a[N];
int n;
typedef long long int LL;
int beibao(int amount) {//这个函数为求数额为amount的时候所需要的最小硬币数
	if (amount == 0)
		return 0;//如果数额为零就不需要硬币
	if (amount < 0) {
		return INF;//如果数额为负数,代表拼不出数 ,就设为正无穷
	}
	int pre = beibao(amount - a[1]) + 1;
	for (int i = 2; i <= n; i++) {		//比较各种方案
		pre = min(pre, beibao(amount - a[i])+1);
	}
	return pre;
}
int main()
{
	int amount;
	cin >> n;//不同面值货币的数量
	cin >> amount;//要拼出的数额值
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}

	cout << beibao(amount) << endl;

	return 0;
}
   

猜你喜欢

转载自blog.csdn.net/u014788620/article/details/82286259
今日推荐