人的理想志向往往和他的能力成正比。

--约翰逊--

 AI 启蒙-无人售货机智能找零算法 


【问题区】

你现在是一家无人售货机生产公司的高级程序员,技术经理叫你实现无人售货机智能找零钱的算法,具体需求如下:

当购物者购物后,插入一张满足支付的人民币,售货机可以自动计算出找零的方案,并控制找零模块出钞,现在需要你实现找零算法找出所有的找零方案,供出钞模块选择~

假设某一时刻零钱有 50元一张,20元2张,10元2张,5元1张,1元8张,某用户随机购买商品(商品价格在1-99元之间)后,他投入一张面值大于所购商品价格的人民币(可选:5元, 10元, 20元, 50元, 100元),请列出所有找零方案!


提示区

此问题主要是要找出待找零的人民币任意相加刚好等于要找的零钱的所有组合,如,顾客购买的商品是3块,投入10块,那么可选的找零方案有:

  1.        1张5元   +   2张 1元

  2.        7张1元


【C代码实现区】

#include <stdio.h>

/***********************************

*输出当前找零方案对应的所有零钱的币值

************************************/

void print_solution(int changes[], int size, int solution){

  int bit = 1;

  int i = 0;

  printf("已经为您找到一种解决方案:\n");

  for(i=0; i<size; i++){

    if((bit& solution)==bit){

      printf(" %d ", changes[i]);

    }

    bit <<=1;

  }

  printf("\n");

}

int main(void){

  //定义可用于找零的零钱池

  int changes[]={1,2,2,5,10,20,50};

  int total = 1;

  int need = 0;

  int num =sizeof(changes)/sizeof(int);

  printf("请输入您要找的零钱数目:\n");

  scanf("%d", &need);

  //计算候选方案的数量

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

    total*=2;

  }

  //遍历所有的解决方案

  for(int j=0; j<total; j++){

    int res = 0;

    int bit = 1;

    for(int k=0; k<num; k++){

      if((bit&j) == bit){

        res+=changes[k];

      }

      bit<<=1;//0x01 => 0x10

    }

    if(res == need){

      print_solution(changes, num, j);

    }

  }

  return 0;

}


【视频讲解区】

视频链接:https://v.qq.com/x/page/r08186cmodc.html

AI 启蒙-无人售货机智能找零算法的更多相关文章

  1. [LeetCode] Coin Change 硬币找零

    You are given coins of different denominations and a total amount of money amount. Write a function ...

  2. NYOJ995硬币找零(简单dp)

    /* 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 思路:转换成 ...

  3. HDU3591找零,背包

    题目大概的意思就是:小强用硬币买东西,硬币有N种,面值为Vi,店家有各种硬币都有无限个,而小强只有Ci个(分别对应Vi) 问最小交易硬币数,就是一个有找零的背包问题啦. 我的上一篇博客跟这hdu359 ...

  4. 【ACM小白成长撸】--贪婪法解硬币找零问题

    question:假设有一种货币,它有面值为1分.2分.5分和1角的硬币,最少需要多少个硬币来找出K分钱的零钱.按照贪婪法的思想,需要不断地使用面值最大的硬币.如果找零的值小于最大的硬币值,则尝试第二 ...

  5. P3092 [USACO13NOV]没有找零No Change

    题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K coins (1 ...

  6. [USACO13NOV]没有找零No Change [TPLY]

    [USACO13NOV]没有找零No Change 题目链接 https://www.luogu.org/problemnew/show/3092 做题背景 FJ不是一个合格的消费者,不知法懂法用法, ...

  7. [LeetCode] Lemonade Change 买柠檬找零

    At a lemonade stand, each lemonade costs $5.  Customers are standing in a queue to buy from you, and ...

  8. [Swift]LeetCode860. 柠檬水找零 | Lemonade Change

    At a lemonade stand, each lemonade costs $5. Customers are standing in a queue to buy from you, and ...

  9. Leetcode 860. 柠檬水找零

    860. 柠檬水找零  显示英文描述 我的提交返回竞赛   用户通过次数187 用户尝试次数211 通过次数195 提交次数437 题目难度Easy 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾 ...

随机推荐

  1. SuperMap/PlottingSymbol

    https://github.com/SuperMap/PlottingSymbol

  2. this 的使用方法 —— javascript中的this讲解!

    从自己刚刚开始学习javascript到现在已经很久了,今天得益于新酱的细心讲解,总算是把this这个“雾中花”看清晰了. 在此首先感谢新酱的讲解 下面将this的一些基本使用和大家分享一下: 查看t ...

  3. vue-cli 安装失败Failed to download repo vuejs-templates/vuedemo: Response code 404 (Not Found)

    还原问题现场: 第一次使用vue init webpack projectName的时候,由于操作失误,执行了两次npm install -g vue-cli,然后再使用vue init webpac ...

  4. c++getline()、get()等

    1.cin 接受一个字符串,遇“空格”.“TAB”.“回车”都结束 2.cin.get() cin.get(字符变量名)可以用来接收字符 只能接收一个字符 cin.get(字符数组名,接收字符数目)用 ...

  5. 【html】点击链接让页面在 iframe 中变换

    Demo: <html><body> <a href= "1.html " target= "iFrameName "> p ...

  6. 学习java前端 两种form表单提交方式

    第一种:原生方式 注意点:button标签的style为submit <form action="/trans/doTrans.do" method="post&q ...

  7. starshot常见问题(New)

    Element组件网址: http://element-cn.eleme.io/#/zh-CN/component/message Layer组件网址: https://www.layui.com/d ...

  8. 提高PHP开发效率, PhpStorm必装的几款插件

    1. Translation 最好用的翻译插件 对于我等英文不好的同学来说,简直是福音. 打开翻译对话框 : Ctrl + Shift + O(英文字母o) 鼠标取词并翻译 : Ctrl + Shif ...

  9. Hbase的安装和基本使用

    Hbase介绍 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行于H ...

  10. 20155239吕宇轩 Linux下IPC机制

    20155239吕宇轩 Linux下IPC机制 - 共享内存 原理:把所有需要使用的共享数据都存放在共享内存 区域中,任何想要访问这些共享数据的进程都必须在自己的进程地址空间中新增加一块内存区域,用来 ...