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

--约翰逊--

 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. 【CF809E】Surprise me!

    题目 这是一道神仙题 看到这样一个鬼畜的柿子 \[\sum_{i=1}^n\sum_{j=1}^n\varphi(a_i\times a_j)\times dis(i,j)\] 又是树上距离又是\(\ ...

  2. P2619 [国家集训队2]Tree I

    Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...

  3. [转] Eclipse安装SVN插件

    eclipse里安装SVN插件,一般来说,有三种方式: 1. 直接下载SVN插件,将其解压到eclipse的对应目录里 2. 使用eclipse 里Help菜单的“Install New Softwa ...

  4. Metapackage包

    Metapackage(功能包集)是把一些相近的功能模块. 软件包放到一起. ROS里常见的Metapacakge有: 2.Metapackage写法 CMakeLists.txt 写法如下: cma ...

  5. Kafka设计解析(七)Kafka Stream

    转载自 技术世界,原文链接 Kafka设计解析(七)- Kafka Stream 本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka ...

  6. JIRA使用方法,简易图解

          我们公司要用版本控制(SVN)和过程管理(JIRA)相配合开发软件,所以两个都得用喽!     JIRA是集项目计划.任务分配.需求管理.错误跟踪于一体的商业软件.JIRA创建的问题类型包 ...

  7. MHA实践操作

    1.MHA部署解读: 1.1MHA Manager可以部署在一台slave上.MHA Manager探测集群的node节点,当发现master出现故障的时候,它可以自动将具有最新数据的slave提升为 ...

  8. N项阶乘累加求和新算法

    pdf原版链接

  9. 存储过程定义多个游标多个begin

    1.直接定义多个显示游标 CREATE OR REPLACE PROCEDURE ACC.DBP_REALCITYTRAFFICCNT IS CURSOR cur1 IS SELECT ... --第 ...

  10. Xamarin 编写混合APP趟坑记录(二)

    前言 公司要开发一个App,为了便于维护和更新,而不用每次去苹果审核,采用的是混合开发方式:用WebVie+WebApp的方式. 因为本人不会Java和ObjectC,公司又不想花钱招这两个岗位的人, ...