组合算法编程,深感脑子不好使了,请捞我一把啊。怎么编程序啊,完全没有思路。

qq112141874 2018-09-26 10:19:03
给定一个数比如,A=30。 还有一个数组 num(10),num里面是排序好了的10个1-30之间的数据,比如2、5、12、15、16、、、、。请列出所有任意num元素之和不超过A的情况。 比如,2、12、15 和 16 和 2、12、16 和 5、5、5、15等等。允许重复使用 num元素。
...全文
243 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
所有的算法,我们都可以随便说“只要n层嵌套遍历出来数据向量组合,然后检查一下组合结果是否是需要的组合就行了”。其实编程设计不是这么简单,我们随时看到这样的程序设计“半途而废”的惨状。 原本用1分钟、用4、5行代码就能写好的算法,为什么有的人就是写不好呢? 基础不同。
  • 打赏
  • 举报
回复
字句逻辑 --> 子句逻辑 所有的归纳都可以被随便说成是遍历枚举,所有的需要将算法推入深入的设计都可以被说成是只要是在最浅层做点数据检查就“行”。但是实践是什么呢? 如果不从递归、数学归纳、逻辑子句、算法结构等任一方面打下良好的基础,那么别人写5行代码就能做出来的设计,你偏要写50行手工代码(还未必能很好地应付“循环层数灵活变动”的情况),而且刚写2、3层循环你就蒙了,代码可读性就好像踩碎了的香蕉一样无法聚合起来。这才是结果差异。
qq112141874 2018-09-26
  • 打赏
  • 举报
回复
有具体算法吗? 哪怕给个类似的网页参考也好啊。
一旦组合数据量多了,循环嵌套实在太多了。
  • 打赏
  • 举报
回复
上述逻辑还应该在最外层(最开始)增加一个约束,就是目标合计数要大于0,用来作为停止递归(或者迭代)的条件。 “允许重复使用 num元素”只是将上述逻辑增加可冗余搜索的逻辑,抽出最后一个数字x以后,如果n个数字集合能得到a-x的所有排序结果,就把x放入结果中。
X-i-n 2018-09-26
  • 打赏
  • 举报
回复
我来抛个砖 先将num从小到大,然后从只取1个数到10个数全用,分别讨论: 取n个数就是n层循环,每一个数都从num0-num9进行,但是一旦末位数的取值使结果超出条件,就跳出最内层循环,依此类推,当前x位超出,就跳出第x层循环。这样就不用循环跑满10^n次。
  • 打赏
  • 举报
回复
你或者学过基本的数学归纳法课程,或者学过字句逻辑,或者学过算法/数据结构课程。 如果什么基础课程都没学过,仅靠自学编程,那肯定不行。
  • 打赏
  • 举报
回复
对于 n 个数(n>1)的排好序的数字集合,假设要得到和为 a 的排列结果: 1. 抽出最后一个数字x,然后得到剩下n-1个数字和为a-x的所有排序结果,然后将 x 放入每一个结果的最后边,就是 n 个数的排列结果; 2. 抽出最后一个数字x,然后得到剩下 n-1 个数字和为a的所有排序结果,作为 n 个数的排列结果。 对于数字集合中只有1个的情况,如果这个数字==a,那么直接输出这个集合。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧