Touch_2011 发表于 2013-1-26 14:03:39

购物卷1000元买多种东西,刚好用完的解决方案(C语言实现)

http://dl.iteye.com/upload/attachment/481631/2d2bba86-a64f-3ffe-808b-c0c653bd018b.jpg
 
#include<stdio.h>#define M_MAX20//最多输入的商品种类#define MONEY1000//购物卷金额int m;//商品种类int price;//存储各种商品价格int max_count;//每一种商品最多能买多少个int count;//记录当前各个商品的个数int remark;//记录符号条件的商品个数int k=0;//记录总共有多少种解决方案void max_count_value();//给max_count数组赋值void calculate(int index);//递归寻找符号条件的方案void show_answer();//显示所有方案void main(){int i;printf("please input m:\n");scanf("%d",&m);for(i=0;i<m;i++){scanf("%d",&price);}max_count_value();calculate(0);show_answer();}//给max_count数组赋值void max_count_value(){int i,j;for(i=0;i<m;i++){for(j=0;;j++)if(price*j>MONEY)break;max_count=j-1;}}//递归寻找符号条件的方案void calculate(int index){int i,sum=0;    if(index==m){//递归出口for(i=0;i<m;i++)sum+=count*price;if(sum==MONEY){//找到一种方案,记录下当时的各类商品个数for(i=0;i<m;i++)       remark=count;k++;}return;}    for(i=0;i<=max_count;i++){count=i;      calculate(index+1);//递归}}//显示所有方案void show_answer(){int i,j;printf("%d\n",k);for(i=0;i<k;i++){for(j=0;j<m;j++)         printf("%-3d",remark);printf("\n");}} 原题:
http://dl.iteye.com/upload/attachment/481657/eb6ce219-ccc8-3776-8ca0-e7dd9afaa87c.jpg
页: [1]
查看完整版本: 购物卷1000元买多种东西,刚好用完的解决方案(C语言实现)