2011 蓝桥杯【初赛试题】 程序设计题二

简介:

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

程序输入:

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

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

程序输出:

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

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

例如:

输入:

2

200

300

则应输出:

2

2 2

5 0

输入:

2

500

800

则应输出:

1

2 0

 

 

#include<stdio.h>
#include<string.h>
int cost;
int n;//物品个数 
int price[2000];//物品单价 
int num[100];//物品数目 
int sum=0;//方案数目 
int arg[100][100];//每种方案的商品分布
void Fun(int x)//递归,每件物品分为买或者不买的情况(同一物品可以买多次) 
{
    int i;
    if(cost>1000||x>=n)
    return;
    if(cost==1000)
    {
       for(i=0; i<n; i++)
         arg[sum][i] = num[i];
         sum++;
         return;

    }
    num[x]++;//选择这件商品的情况 
    cost+=price[x];
    Fun(x);//还可能继续选这件商品 
    num[x]--;//不选择这件商品的情况 
    cost-=price[x];
    Fun(x+1);//往下走 
}
int main()
{
    int i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&price[i]);
    memset(num,0,sizeof(num));//数组清0为了之后的加减运算 
    Fun(0);
    printf("%d\n",sum);
    for(i=0;i<sum;i++)
    {
       printf("%d",arg[i][0]);//防止多输出空格 
       for(j=1;j<n;j++)
       printf(" %d",arg[i][j]);
       puts(""); 
    }

    return 0;
}

参考:http://www.cnblogs.com/hxsyl/archive/2012/12/15/2819911.html 

相关文章
|
算法 C语言 C++
第十四届蓝桥杯C/C++程序设计大学B组(参赛经历总结)
第十四届蓝桥杯C/C++程序设计大学B组(参赛经历总结)(蒟蒻的流泪经历)
180 0
|
存储 人工智能 BI
P8597 [蓝桥杯 2013 省 B] 翻硬币个人思考总结+第五届传智杯ABC 初赛题解
桌上放着排成一排的若干硬币。我们用 `*` 表示正面,用 `o` 表示反面(是小写字母,不是零),比如可能情形是 `**oo***oooo`,如果同时翻转左边的两个硬币,则变为 `oooo***oooo`。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?
146 0
单片机比赛准备08-蓝桥杯-第六届初赛模拟题(温度采集和控制装置)
单片机比赛准备08-蓝桥杯-第六届初赛模拟题(温度采集和控制装置)
98 0
单片机比赛准备08-蓝桥杯-第六届初赛模拟题(温度采集和控制装置)
单片机比赛准备07-蓝桥杯-第五届初赛模拟题(模拟智能灌溉装置)
单片机比赛准备07-蓝桥杯-第五届初赛模拟题(模拟智能灌溉装置)
55 0
单片机比赛准备07-蓝桥杯-第五届初赛模拟题(模拟智能灌溉装置)
单片机比赛准备06-蓝桥杯-第四届初赛模拟题(自动售水机)
单片机比赛准备06-蓝桥杯-第四届初赛模拟题(自动售水机)
121 0
单片机比赛准备06-蓝桥杯-第四届初赛模拟题(自动售水机)
单片机比赛准备05-蓝桥杯-第三届初赛模拟题(模拟传送装置)
单片机比赛准备05-蓝桥杯-第三届初赛模拟题(模拟传送装置)
115 0
单片机比赛准备05-蓝桥杯-第三届初赛模拟题(模拟传送装置)
|
人工智能 移动开发 测试技术
【蓝桥杯历年真题合集】蓝桥杯2022初赛
给定一个长度为 n 的数列A1,A2,... , An 和一个非负整数 x。 给定 m 次查询, 每次询问能否从某个区间 [l, r] 中选择两个数使得他们的异或等于 x。
413 0
【蓝桥杯历年真题合集】蓝桥杯2022初赛
|
机器学习/深度学习 存储 测试技术
【蓝桥杯历年真题合集】蓝桥杯2021初赛
小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有n 箱货物要摆放在仓库,每箱货物都是规则的正方体。 小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所有的货物最终摆成一个大的立方体。即在长、宽、高的方向上分别堆L、W、H 的货物,满足n = L×W×H。...
393 0
【蓝桥杯历年真题合集】蓝桥杯2021初赛
|
搜索推荐 测试技术
【蓝桥杯历年真题合集】蓝桥杯2020初赛
门牌制作 小蓝要为一条街的住户制作门牌号。 这条街一共有2020 位住户,门牌号从1 到2020 编号。 小蓝制作门牌的方法是先制作0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1 个字符7。 请问要制作所有的1 到2020 号门牌,总共需要多少个字符2? 输出格式 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。 #i.
104 0
【蓝桥杯历年真题合集】蓝桥杯2020初赛
|
测试技术
【蓝桥杯历年真题合集】蓝桥杯2019初赛
对于上面的迷宫,从入口开始,可以按DRRURRDDDR的顺序通过迷宫, 一共1010步。其中D、U、L、RD、U、L、R分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(3030行5050列),请找出一种通过迷宫的方式,其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。...
116 0
【蓝桥杯历年真题合集】蓝桥杯2019初赛