首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c编程,该如何解决

2012-03-08 
c编程编程设计:公司发了购物券1000元,限定只能购买m种商品,每种商品的价格分别为m1,m2.......,要求程序列

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

[解决办法]

C/C++ code
#include<stdio.h>#include<stdlib.h>int *a,*b;int n;int count = 0;void print(){    int i;    for(i = 0; i < n; i++)        printf("%d ",b[i]);    printf("\n");}void problem9(int total,int size){    if(size != n )    {        if(total == 0)//判断背包是否正装满        {            count++;//存放可行方案的个数            print();//输出此可行解        }        else        {            problem9(total,size + 1);//未放入物品a【size】的情况            if(total - a[size] >= 0)//判断放入a【size】后,是否会超出背包的承载            {                b[size]++;    //使得a【size】对应物品的数量加1                problem9(total - a[size],size);    //放入物品a[size]的情况                b[size]--;    //使得相应的物品数量减1            }        }    }}void main(){    int i,j;    scanf("%d",&n);    a = (int*)malloc(sizeof(int) * n);    b = (int*)malloc(sizeof(int) * n);    for(i = 0; i < n; i++)        scanf("%d",&a[i]);    for(j = 0; j < n; j++)        b[j] = 0;    problem9(1000,0);    printf("%d",count);}
[解决办法]
C/C++ code
#include<stdio.h>#include<stdlib.h>int *a,*b[50];int n;int count = 0;void print(){    int i,j;    for(j = 0; j < count; j++)    {        for(i = 0; i < n; i++)            printf("%d ",b[j][i]);        printf("\n");    }}void problem9(int total,int size){    int j;    if(size != n )    {        if(total == 0)//判断背包是否正装满        {            count++;//存放可行方案的个数            b[count] = (int*)malloc(sizeof(int) * n);            for(j = 0; j < n; j++)                b[count][j] = b[count-1][j];        }        else        {            problem9(total,size + 1);//未放入物品a【size】的情况            if(total - a[size] >= 0)//判断放入a【size】后,是否会超出背包的承载            {                b[count][size]++;    //使得a【size】对应物品的数量加1                problem9(total - a[size],size);    //放入物品a[size]的情况                b[count][size]--;    //使得相应的物品数量减1            }        }    }}void main(){    int i,j;    scanf("%d",&n);    a = (int*)malloc(sizeof(int) * n);    b[count] = (int*)malloc(sizeof(int) * n);    for(i = 0; i < n; i++)        scanf("%d",&a[i]);    for(j = 0; j < n; j++)        b[count][j] = 0;    problem9(1000,0);    printf("%d\n",count);    print();//输出此可行解}
[解决办法]
探讨
C/C++ code
#include<stdio.h>
#include<stdlib.h>
int *a,*b[50];
int n;
int count = 0;
void print()
{
int i,j;
for(j = 0; j < count; j++)
{
for(i = 0; i < n; i++)
……

热点排行