递归-C语言:给定一个数组,求和为定值的组合的个数(不限组合内的数字个数)怎么解决?

问题描述

C语言:给定一个数组,求和为定值的组合的个数(不限组合内的数字个数)怎么解决?

问题在于只用C语言,递归和回溯都不太懂,希望给个大概的思路,初学语言,谢谢了!

解决方案

最简单的就是递归,可是递归你又不懂。递归都不懂,那你几乎和不会写程序也没区别了,那怎么和你解释呢。

解决方案二:

花10分钟时间,就能把递归搞清楚。给你的思路就是磨刀不误砍柴工

解决方案三:

还是递归方便点,不过也可以用循环实现,大致就是暴力枚举,看是否符合要求,如果一组枚举过程中发现累加的值大于给定的值那这种情况后面的就不必继续了。

解决方案四:

可以用搜索算法 但是非常耗费时间 这道题目对时间有要求吗

解决方案五:

这应该类似于完全背包问题,你百度完全背包。或者看我博客,有一篇动态规划相关文章。

时间: 2025-01-31 09:11:26

递归-C语言:给定一个数组,求和为定值的组合的个数(不限组合内的数字个数)怎么解决?的相关文章

c语言-C语言 给定一个整数序列和一个数k,求这个序列中第k小的数。

问题描述 C语言 给定一个整数序列和一个数k,求这个序列中第k小的数. C语言 给定一个整数序列和一个数k,求这个序列中第k小的数. 我的程序 #include<stdio.h> int n[10000]; void Nok() { int i=0,j=0,t,k,q=0; char c; scanf("%d",&n[i++]); c=getchar(); while(c!='n') { scanf("%d",&n[i++]); c=ge

printf-c语言中一个数组输出的问题

问题描述 c语言中一个数组输出的问题 #include int main() { int i; int temp[5]; for(i=1;i<=5;i++) { temp[i]=i; } printf("---------"); for(i=1;i<=5;i++) { printf("%d",temp[i]); } return 0; } 为什么能正常的给第5个元素赋值,并能输出第5个元素 解决方案 你越界了,数组下标从0开始,应该是 i=0:i<

【算法】给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。

给定一个数组,除了一个数出现1次之外,其余数都出现3次.找出出现一次的数.如:{1, 2, 1, 2, 1, 2, 7},找出7.格式:第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数. package yn; import java.util.Scanner; public class OutputMin { public static void main(String[] args) { Scanner input

c语言 数组-请教如何用c语言去除一个数组中所有值为零的元素,而且这些零元素中有连续排列的?

问题描述 请教如何用c语言去除一个数组中所有值为零的元素,而且这些零元素中有连续排列的? 能否给一个示例程序?感激不尽! 比如以下这个数组中有连续的0元素,如何去除所有的零元素? double a[64]={4.63866e+020,1.456e+027,-7.67487e+017,9.86481e+016,0,0,-3.1101e+014,-9.38282e+010, 1.456e+027,4.60249e+033,-2.3969e+024,3.36857e+023,0,0,-9.64264e

c语言-声明一个数组,由用户输入数组长度。不赋初值不报错,赋初值就报错?为什么

问题描述 声明一个数组,由用户输入数组长度.不赋初值不报错,赋初值就报错?为什么 基本上,代码如下: #include<stdio.h> int main(){ int num = 0; printf(""输入数组长度:""); scanf(""%d""&num); int arr[num]; //编译不报错 //int arr[num] = {0}://编译报错 return 0;} 解决方案 因为C语言

java-有一个数组,数组里任意个数数字相加等于一固定数值,求出所有可能性的任意数字组合?

问题描述 有一个数组,数组里任意个数数字相加等于一固定数值,求出所有可能性的任意数字组合? 最近遇到一道java算法题,给定一个数组,求出数组里任意个数相加等于一固定数值,求出所有可能性的任意数字组合?求解答,用最原始的算法做出这道题,求大神指点,大神给出答案? 解决方案 /** * * @param arr * 数组 * @param num * 固定值 * @return 组合 */ public static List a(int[] arr, int num) { List strLis

分享JS数组求和与求最大值的方法_javascript技巧

前言 面试遇到一个问题:JS数组求和函数.我第一想到的就是数组循环.然而我觉得面试官问这个问题一定不是想考这个人人皆知的方法.当时机智的我竟然想到了递归函数不断加和数组的项,然而折腾了好久都没调好方法,事实证明这并不是最优解.最后面试官问我有没有见过reduce(),真木有哇.所以回来查资料,Array.reduce()是ES5新增的新属性,相似的还有Array.reduceRight(). 下文来总结一下数组求和的方法. 最粗暴的方法:循环获取 通过for循环一项项地加和.看代码: Array

javascript-js判断一个数组不包含一个数

问题描述 js判断一个数组不包含一个数 比如一个数组[1234] 变量a从1循环到5,怎么把5这个数取出来 解决方案 Array.prototype.mycontains = function(e) { for(i=0;i<this.length;i++) { if(this[i] == e) return true; } return false; } 然后这么用for (var i = 0; i <= 5; i++)if (!arr.mycontains(i)) alert(i); 解决方

c语言 c++-c语言求大神解答,一个数组的基础问题

问题描述 c语言求大神解答,一个数组的基础问题 数组的地址是什么?是不是就是数组名,也就是第一个元素的地址,也就是这个数组的首地址? 解决方案 数组名可以当成指向数组首元素的地址使用. 例如:int a[10]; 可以通过: cout<<*a<<endl; //来输出数组a中的第一个元素. cout<<*(a + i)<<endl; //来输出数组中的第i个元素. 下面两个输出的地址值也是相同的. printf("--->%pn",