一个简单的找零贪婪算法_&_scanf函数浅析

同学找我写了一个简单的找零的贪婪算法,中间遇到了一个不了解的知识点,所以顺便记录下来吧

问题描述:

日常交易中找遇到找零钱时,您可能希望最大限度地减少给客户找零的硬币数量,以免您用完了硬币或惹恼客户!。幸运的是,计算机科学已经为收银员提供了最小化硬币数量的方法:贪婪算法。

贪婪算法是一种“在寻找答案时始终采用最佳局部解决方案的算法”。贪婪算法为某些优化问题找到了整体或全局最优解决方案,但对于某些其他问题,只能找到次优的满意解决方案。

假设收银员的抽屉里有用不完的四种硬币:25¢,10¢,5¢和1¢,他需要找给客户找零。如何决定将哪些硬币交给顾客呢?如果你欠某个顾客41美分,那么局部最佳解决方案是拿出一个25美分。 这会将41¢问题减少到16¢问题,因为41 - 25 = 16.也就是说,余数是一个类似但更小的问题。毋庸置疑,另一个25美分的价格会太大,所以你会转向拿出一个10美分,问题的尺度减少到了6美分的问题。这时,你在拿出一个5¢,最后一个1¢,问题就解决了。客户收到一个25¢,10¢,5¢和1¢:总共四个硬币。

实现细节

程序命名为 cash.c。实现的功能是先询问用户找零的数目,然后打印出组成这些零钱的最少的硬币数目。

  • 定义并调用函数 get_positive_float 从用户那里得到一个正的浮点数,用 printf 把答案打印出来。假设收银员的抽屉里只有用不完的四种硬币:25¢,10¢,5¢和1¢,
    • 如果顾客交给收银员$10买 25¢ 的报纸,需要找零$9.75,运行程序时输入9.75.
  • 用户的输入如果不是合法的浮点数,或者是负的浮点数,程序应该不断提醒用户输入正的浮点数。
  • 最后输出一个整数(最少的硬币数量)加回车。
  • 注意浮点数内在的不精确特性。计算找零方案时可以考虑把输入的元转化成分 即把输入的数字从 float 转化位 int,防止不精确带来的误差。
  • 计算完分后,需要调用定义在库math.h中的函数 round,. 将输入四升五入至最近的整数。如:运行输入找零 0.20元, 下面的语句可以找零的元转换为分:
  • int coins = round(dollars * 100);

这样可以把0.20转换为 20.

代码如下:

#include <stdio.h>
int get_positive_float();
int main(){
   
    int a[]={
   25,10,5,1};
    int b[]={
   0,0,0,0};
    bool flag;
    int value1=get_positive_float();
    for(;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值