在C ++中求出总计给定金额的最小数量的纸币和值

假设我们有这样的数量,并且我们必须找到不同面额的最小数量的纸币,这些纸币的总和等于给定的数量。从面额最高的纸币开始,尝试找到给定数量的尽可能多的纸币。这里假设我们有{2000,500,200,100,50,20,10,5,2,1}的无限数量。因此,如果金额为800,则注释将为500、200、100。

在这里,我们将使用贪婪方法来解决此问题。

示例

#include<iostream>

using namespace std;

void countNotes(int amount) {

   int notes[10] = { 2000, 500, 200, 100, 50, 20, 10, 5, 2, 1 };

   int noteFreq[10] = { 0 };

   for (int i = 0; i < 10; i++) {

      if (amount >= notes[i]) {

         noteFreq[i] = amount / notes[i];

         amount = amount - noteFreq[i] * notes[i];

      }

   }

   cout << "笔记数:" << endl;

   for (int i = 0; i < 9; i++) {

      if (noteFreq[i] != 0) {

         cout << notes[i] << " : " << noteFreq[i] << endl;

      }

   }

}

int main() {

   int amount = 1072;

   cout << "Total amount is: " << amount << endl;

   countNotes(amount);

}

输出结果

Total amount is: 1072

笔记数:

500 : 2

50 : 1

20 : 1

2 : 1

以上是 在C ++中求出总计给定金额的最小数量的纸币和值 的全部内容, 来源链接: utcz.com/z/334798.html

回到顶部