前言

  上一篇《C算法编程题(六)串的处理》

  有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家提的一些建议和意见,我当时写这个系列的目的不是探讨算法和C++的特性,可能是我标题写的不好吧,让大家误解了,再这里给大家说声抱歉。

  大家都学过数学,做过奥数题,其实大家看看我写的前几篇文章就会发现,做这类编程题就像做奥数题一样,锻炼的是我们的逻辑思维能力,我当时写的目的也是这样。如果说用一些语言的特性去实现,那我就不用C++了,直接用C#更好的实现,用到C++只是一些简单的不能再简单的语法而已。

  做编程题和做奥数题一样,只不过一个用数学的方式、一个用编程的方式;一个写在纸上、一个运行在电脑上;只要是思路通了,不管用什么方式都可以解决问题,只不过工具不同而已。

  国外一些早期的牛叉编程高手都是数学家出身,所以说学好编程先学好数学。

程序描述

  公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
    程序输入:
    第一行是一个整数m,代表可购买的商品的种类数。
    接下来是m个整数,每个1行,分别代表这m种商品的单价。
    程序输出:
        第一行是一个整数,表示共有多少种方案
        第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
    例如:
        输入:
        2
        200
        300
    则应输出:
        2
        2  2
        5  0
        输入:
        2    
        500
        800
        则应输出:
        1
        2  0

程序实现

  刚看到这个题,有点像找配对的感觉,其实做这种题就是思维能力的问题了,有的人一个小时就可以做出来,有的人哪怕做一天也做不出来。

  这里我说一种最常用的思路,我们输入商品个数是2,单价分别为200和300,那我们先这样想,1000块最大可以200的商品是5个,最大可以买300的商品2个,只是考虑在1000块以内,买一种剩余的钱我们不考虑,所以我们可以分别找在买5个以内200的商品,看可以买300块商品有几个,就是买5个、4个、3个、2个、1个、0个200的商品,剩余的钱可以买多少个300的商品。如果加起来正好是1000块,那就是一种购买的情况。

  思路就是这样,代码用到了一点递归的思想,我就不多说,大家自己理解下。

  完整代码:

 1 #include"stdio.h"
 2 int a[1000];//存放商品价格
 3 int counter=0;
 4 int c[1000];
 5 int num;//商品数目
 6 void f(int b[],int i)
 7 {
 8     int j,sum=0;
 9     if(i>=num)
10     {
11         return ;
12     }
13     else
14     {
15         c[i]=1000/a[i];
16         for(b[i]=0;b[i]<=c[i];b[i]++)
17         {
18             sum=0;
19             if(i==num-1)
20             {
21                 for(j=0;j<num;j++)
22                 {
23                     sum+=b[j]*a[j];
24                 }
25                 if(sum==1000)
26                 {
27                     for(j=0;j<num;j++)
28                     {
29                         printf("%d   ",b[j]);
30                     }
31                     printf("\n");
32                     counter++;
33                 }
34             }
35             else
36             {
37                 f(b,i+1);
38             }
39         }
40         return ;
41     }
42 }
43 void main()
44 {
45     int b[1000]={0};
46     int c[1000];
47
48     int i,j,m=0,sum;
49     printf("商品数目:\n");
50     scanf("%d",&num);
51     printf("商品价格:\n");
52     while(m<num)
53     {
54         scanf("%d",&a[m]);
55         m++;
56     }
57     i=0;
58     c[i]=1000/a[i];
59     for(b[i]=0;b[i]<=c[i];b[i]++)
60     {
61         f(b,i+1);
62     }
63     printf("%d\n",counter);
64     getchar();
65 }

  运行结果:

本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3421554.html,如需转载请自行联系原作者

C算法编程题(七)购物相关推荐

  1. C算法编程题(四)上三角

    前言 上一篇<C算法编程题(三)画表格> 上几篇说的都是根据要求输出一些字符.图案等,今天就再说一个"上三角",有点类似于第二篇说的正螺旋,输出的字符少了,但是逻辑稍微 ...

  2. 【面试锦囊】14种模式搞定面试算法编程题(1-7)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  3. 【面试锦囊】14种模式搞定面试算法编程题(8-14)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  4. C算法编程题(二)正螺旋

    前言 上一篇<C算法编程题(一)扑克牌发牌> 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文<谈谈外企涨工资那些事>,里面楼主讲到外企公司包含的五类人,其实不 ...

  5. system verilog编程题_拼多多2020校招部分算法编程题合集

    拼多多2020校招部分算法编程题2道,多多的魔术盒子和多多的排列函数 其实根据他的匹配职位我们可以看到,这5道题的难度还是并不高,只是作为一个初步筛选,我这边选择了前两道跟大家分享 [编程题一] 多多 ...

  6. 14种模式解决面试算法编程题(PART I)

    万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...

  7. 50道JAVA基础算法编程题【内含分析、程序答案】【建议收藏】【建议收藏】【建议收藏】

    非常基础的题目,但是想学好Java它真的是基础,基础有多重要我就不再废话,重要的事情说三遍[建议收藏][建议收藏][建议收藏]. [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一 ...

  8. 算法编程题的心得体会

    如果是在线笔试,一定要注意问题的规模, 这牵涉到算法时间复杂度的要求 也涉及相关数据结构的设计 比如,一道关于郊游的题目,学生的规模最大才到 10 人: 再考察学生之间的关系时,显然可以使用二维数组b ...

  9. 14种模式解决面试算法编程题(PART II)

    继续 8.树的宽度优先搜索(Tree BFS) 该模式基于广度优先搜索(BFS)技术来遍历树,并使用队列在跳到下一层之前记录下该层的所有节点.使用这种方法可以有效地解决涉及以逐级顺序遍历树的任何问题. ...

最新文章

  1. rust房子 如何拆除_小产权房“依法拆除”?中央新文件透露“1个新信号”
  2. VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
  3. NAB 2019见闻:CAE视频编码与QoE
  4. StevenBoyd--Convex optimization--0. Contents-catalog
  5. LeetCode: Merge k Sorted Lists
  6. 【maven】maven入门以及maven常用命令
  7. DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法(转)
  8. vue+node全栈移动商城【4】-创建get、send接口,接收数据更新视图
  9. 查找和杀掉postgresql堵塞的会话
  10. Oracle查看表空间使用情况
  11. 3.6 矩阵秩的其它重要关系
  12. vue项目实现权限控制的几种思路
  13. operator does not exist: timestamp with time zone >= character varying / pandas 链接 psycopg2保存数据问题
  14. 达内java月考试题_达内java1512第二次月考(附答案)doc.doc
  15. 做微信小程序需要ICP证书吗
  16. 这156套PS笔刷合集!两天时间给大家盘来了!
  17. MATLAB画三维动态魔方/旋转魔方/旋转立方体
  18. 2021-2022学年广州市广大附中九年级第二学期开学考试英语试题
  19. python--定义新矩阵、矩阵赋值、改变类型
  20. NGUI制作字体的三种方法

热门文章

  1. antlr 可以用java写吗_java – 我们可以用ANTLR定义一个非上下文语法吗?
  2. gpu tensorflow 怎么看是否安装成功_安装keras模块以及使用GPU加速
  3. git指令如何葱master转到dev_看完这篇还不会用Git,那我就哭了
  4. 利用计算机绘制地质图的思路和方法,基于平面地质图的三维地质建模方法研究...
  5. 服务器复制文件进程,服务器复制文件进程
  6. tcp中的crc检验算法原理_CRC校验原理及其实现
  7. 修改oracle 安裝參數,oracle 安裝相關參數設定
  8. Ibator生成iBATIS配置文件 DO及DAO操作记录
  9. 通过反射创建新类示例的两种方式及比较
  10. Apache Avro 与 Thrift 比较