c语言的纸币找零问题
纸币面额:100、50、20、10、5、1 元。
输入一个整数金额,输出每种纸币需要多少张,贪心,尽量张数最少。
算法步骤
- 定义面额列表并降序排列:将纸币面额按从大到小的顺序排列,如 [100, 50, 20, 10, 5, 1] 元。
- 初始化结果字典:创建一个空字典用于存储每种面额对应的张数。
- 遍历面额计算张数:对于每个面额,计算当前剩余金额可以兑换的最大张数(使用整数除法),并将该面额和张数存入结果字典。
- 更新剩余金额:从剩余金额中减去已兑换的金额(面额 × 张数)。
- 重复步骤3-4:继续处理下一个面额,直到所有面额都处理完毕或剩余金额为0。
- 输出结果:返回结果字典,包含每种面额需要的张数。
图1:贪心算法流程图
这张流程图展示了贪心算法的完整执行过程:从输入金额开始,按面额从大到小依次计算每种纸币的张数,更新剩余金额,直到所有面额处理完毕,最后输出结果。
运行后结果:
图2:程序运行结果
这是程序运行后的输出结果,展示了输入金额为 376 元时,按照贪心算法计算出的每种面额纸币张数:100元3张、50元1张、20元1张、5元1张、1元1张,总计7张纸币;
总结:贪心算法是需要有排序的列如:(100,50,20,10,5,1)是有序数组(降序),如果遇到乱序的话,就需要用到冒泡排序或qsort的自定义int返回值的函数的(无类型指针参数)来排序;总之就是满足贪心的性质就可以用到;
