博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装书包问题:从不同重量书中选任意本装入书包,刚好达到书包限重
阅读量:5226 次
发布时间:2019-06-14

本文共 1648 字,大约阅读时间需要 5 分钟。

装书包问题:

从不同重量书中选任意本装入书包,刚好达到书包限重;

1,mony[ ]存放多种不同重量的书;

2,书包限重sum;

3,从mony[ ]中选取任意组合,使总重恰好等于sum;

4,输出所有可能组合;

#include
#include
int sum=10;//计算mony中所有能组成sum的元素组合,元素不得重复,输出所有组合情况//start为遍历数组mony[]的起始位置:void FUN(int mony[],int len,int ret[],int start){
//len是mony长度 if(ret[len]>sum) return; if(ret[len]==sum){
//ret[]最后一位存和数 int i=0; for(;i<=len;i++){ if(ret[i]!=0){ printf("----%d",ret[i]); } } printf("\n"); return; } int i=start; for(;i

输出结果如下:

xu@xu-ThinkPad-X61:~/algorithm$ ./exe beibaobuchfu.c

----1----3----2----4----10

----1----5----4----10
----3----5----2----10

 

算法非递归实现方法:

1.举个栗子:inp[ ]={1,2,3,4},sum=6,计算组成sum所有可能不重复元素组合,输出最小个数值;

2,ret[sum+1]存放结果:当{1,2,3,4}中任意k个元素可以组成i时(比如2和4能组成6,此时k=2),ret[i]存放元素个数k;

3,ret[sum+1]存放的值就是可以组成sum的组合中元素个数最小的个数值;

 

#include
#include
void FUN(int inp[],int len, int*ret, int lenret){ int i=0; for(;i
ret[j+tmp]? ret[j+tmp]:(ret[j]+1)); } } }}int main(){ int input[]={
1,2,3,4}; int sum=6; int result[6+1]={
1}; FUN(input,4, result, sum+1); int k=0; for(;k<7;k++){ printf("%d++",result[k]); } return 0;}

输出结果:

xu@xu-ThinkPad-X61:~/algorithm$ ./exe suibian.c

1++2++2++2++2++3++3++

说明最少3个元素组成6;

 

 

转载于:https://www.cnblogs.com/McQueen1987/p/3538123.html

你可能感兴趣的文章
15.210控制台故障分析(解决问题的思路)
查看>>
常用到的多种锁(随时可能修改)
查看>>
用UL标签+CSS实现的柱状图
查看>>
mfc Edit控件属性
查看>>
[Linux]PHP-FPM与NGINX的两种通讯方式
查看>>
Java实现二分查找
查看>>
优秀员工一定要升职吗
查看>>
[LintCode] 462 Total Occurrence of Target
查看>>
springboot---redis缓存的使用
查看>>
架构图-模型
查看>>
sql常见面试题
查看>>
jQuery总结第一天
查看>>
Java -- Swing 组件使用
查看>>
Software--Architecture--DesignPattern IoC, Factory Method, Source Locator
查看>>
poj1936---subsequence(判断子串)
查看>>
黑马程序员_Java基础枚举类型
查看>>
[ python ] 练习作业 - 2
查看>>
一位90后程序员的自述:如何从年薪3w到30w!
查看>>
在.net core上使用Entity FramWork(Db first)
查看>>
System.Net.WebException: 无法显示错误消息,原因是无法找到包含此错误消息的可选资源程序集...
查看>>