• 蓝桥


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

    要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。
    对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。

    #include<iostream>
    #include<cstring>
    #include<string>
    using namespace std;
    int count[1000];
    int price[1000];
    int ans[1000][1000];int num,n;
    void dfs(int cnt,int sum,int money)
    {
        int i;
        if(money==sum)
        {
            for(i=0;i<n;i++)
                ans[num][i] = count[i];
            ++num;
            return ;
        }
        if(sum>money || cnt>=n)
            return ;
        sum += price[cnt];
        ++count[cnt];
        dfs(cnt,sum,money);
        sum -= price[cnt];
        --count[cnt];
        dfs(cnt+1,sum,money);
    }
    int main()
    {
        
        
        while(scanf("%d",&n)!=EOF)
        {
            int sum=0,i,j;num =0 ;
            for(i=0;i<n;i++)
            {
                scanf("%d",&price[i]);
            }
            dfs(0,0,1000);
            cout<<num<<endl;
            for(i=0;i<num;i++)
            {
                for(j=0;j<n;j++)
                    printf("%d ",ans[i][j]);
                cout<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    CCPC长春赛重现
    2016弱校联盟十一专场10.3,BNU52308,大模拟
    2016弱校联盟十一专场10.3,BNU52308,大模拟
    UVA12264 二分最大流,注意pdf的样例是错的
    UVA12264 二分最大流,注意pdf的样例是错的
    UVA1658海军上将,拆点费用流
    UVA1658海军上将,拆点费用流
    angular报错:Please add a @Pipe/@Directive/@Component annotation
    angular 自定义验证器
    ionic 学习笔记
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/3603418.html
Copyright © 2020-2023  润新知