首页 > 其他 > 详细

蓝桥

时间:2014-03-16 18:59:31      阅读:451      评论:0      收藏:0      [点我收藏+]

公司发了某商店的购物券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。

 

 

bubuko.com,布布扣
#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;
}
bubuko.com,布布扣

蓝桥,布布扣,bubuko.com

蓝桥

原文:http://www.cnblogs.com/Deng1185246160/p/3603418.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!