zoukankan      html  css  js  c++  java
  • 1000元购物券 (分治递归)

    题目:

    公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。

    程序输入:

    第一行是一个整数m,代表可购买的商品的种类数。

    接下来是m个整数,每个1行,分别代表这m种商品的单价。

    程序输出:

           第一行是一个整数,表示共有多少种方案

           第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。

    例如:

           输入:

    2

    200

    300

    则应输出:

    2

    2  2

    5  0

           输入:

    2

    500

    800

    则应输出:

    1

    2  0

     

    第一个商品买多少,还剩多少钱,对于第二个可以类似处理。简单的递归!2011年蓝点杯预赛题,当时不会做,惭愧。

     

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int price[100],tmp[100];
    int ans[100][100];
    
    int s;//一共多少种
    int tnum;
     
    void fun(int a[],int sum,int n);
     
    int main()
    {
      int num,i,j;  
      scanf("%d",&num);
      tnum = num;    
        for(i = 0 ; i < num ; ++i)
          scanf("%d",&price[i]); 
         
        memset(ans,0,sizeof(ans));
      
        s = 0;      
        fun(price,1000,num);   
         
        printf("%d\n",s);
        for(i = 0 ; i < s ; ++i)
        {
              for(j = 0 ; j < num ; ++j)
                printf("%d ",ans[i][j]);
                printf("\n");
        }
          
      system("pause");    
      return 0;  
    }
    
    void fun(int a[],int sum,int n)//从后往前 
    {
       int i,j,k;
       if(0 == n) //每个商品看完了 
       {
           if(0 == sum)//钱正好用完 
           {
              for(j = 0 ;j < tnum; ++j)
               ans[s][j] = tmp[j];      
              ++s;
           }
           return;    
       }
       k = sum/a[n-1];//最多能买几个第 n 个商品 
      
       for(i = k ; i >= 0 ; --i)
       {
             tmp[n-1] = i;
             fun(a,sum - i*price[n-1],n-1);//递归核心 
       } 
    }
    

      

  • 相关阅读:
    Flex 开源框架及工具 枫
    String.Format格式说明 枫
    HTTP服务器状态代码定义(Status Code Definitions) 枫
    像素对应表 枫
    js各种获取屏幕高度宽度 枫
    c#正则表达式帮助 枫
    使用模板引擎Trimpath 枫
    分布式缓存HttpRuntime.cache应用到单点登陆中_优化登陆 枫
    Query this 和 $(this) 的区别 枫
    css and js style 枫
  • 原文地址:https://www.cnblogs.com/HpuAcmer/p/2437840.html
Copyright © 2011-2022 走看看