学习处理数组子集和的算法
来源:互联网 发布:spark kmeans java 编辑:程序博客网 时间:2024/06/06 03:33
这个问题我目前只知道递归的解法,欢迎大家提出非递归的解法^_^
1 #include <stdlib.h> 2 3 // 求某数组所有元素做加法或减法结果为某个值的问题递归解法,目前我不知道其他解法 4 void func(int* arr, int len, int sum, int i, int num, int* aux) 5 { 6 if(i == len) 7 { 8 if(sum == num) 9 {10 for(int j = 0; j < len; j++)11 printf("%c %2d ", aux[j]?'+':'-', arr[j]);12 printf("= %d\n", num);13 }14 return;15 }16 aux[i] = 1;17 func(arr, len, sum+arr[i], i+1, num, aux);18 aux[i] = 0;19 func(arr, len, sum-arr[i], i+1, num, aux);20 }21 22 // 求某数组的子集之和某个值的问题的递归解法23 void func_subset(int* arr, int len, int sum, int i, int num, int* aux)24 {25 if(i == len)26 {27 if(sum == num)28 {29 for(int j = 0; j < len; j++)30 aux[j]?printf("+ %2d ", arr[j]):printf(" ", arr[j]);31 printf("= %d\n", num);32 }33 return;34 }35 aux[i] = 1;36 func_subset(arr, len, sum+arr[i], i+1, num, aux);37 aux[i] = 0;38 func_subset(arr, len, sum, i+1, num, aux);39 }40 41 int main()42 {43 int arr[] = {4, 8, 1, 1, 3, 3, 2, 2, 4};44 int* aux = new int[sizeof(arr)/4];45 printf(">> 求全部元素的加减运算结果为某个值的问题\n");46 func(arr, sizeof(arr)/4, 0, 0, 24, aux);47 printf(">> 求子集之和为某个值的问题\n");48 func_subset(arr, sizeof(arr)/4, 0, 0, 24, aux);49 free(aux);50 51 getchar();52 return 0;53 }
输出结果为:
>> 求全部元素的加减运算结果为某个值的问题+ 4 + 8 + 1 + 1 + 3 + 3 + 2 - 2 + 4 = 24+ 4 + 8 + 1 + 1 + 3 + 3 - 2 + 2 + 4 = 24+ 4 + 8 - 1 - 1 + 3 + 3 + 2 + 2 + 4 = 24>> 求子集之和为某个值的问题+ 4 + 8 + 1 + 1 + 3 + 3 + 2 + 2 = 24+ 4 + 8 + 1 + 1 + 3 + 3 + 4 = 24+ 4 + 8 + 1 + 3 + 2 + 2 + 4 = 24+ 4 + 8 + 1 + 3 + 2 + 2 + 4 = 24+ 4 + 8 + 1 + 3 + 2 + 2 + 4 = 24+ 4 + 8 + 1 + 3 + 2 + 2 + 4 = 24+ 4 + 8 + 3 + 3 + 2 + 4 = 24+ 4 + 8 + 3 + 3 + 2 + 4 = 24 + 8 + 1 + 1 + 3 + 3 + 2 + 2 + 4 = 24
- 学习处理数组子集和的算法
- 算法学习--子集
- 数组的子集
- 求子集的算法
- 子集的二进制算法
- 递归算法-求所有和为10的子集
- 算法题:求所有和为N的子集
- C++动态规划算法之子集的和
- 求解数组的所有子集
- Subsets 数组的所有子集
- 随机获取数组的子集
- 求数组的所有子集
- 关于算法竞赛入门经典一书的思考学习——枚举排序和子集生成!
- leetcode 78. Subsets-数组子集|回溯算法
- 子集的和
- 所有子集的和
- 面试算法:在整形数组中构建元素之和能整除数组长度的子集
- 算法学习——求子集算法
- List<string>和string[]
- 找回Windows 8 开机启动引导菜单
- C#遍历文件名
- python 间谍程序传输文件改进版 PHP作服务端
- 2013年:各大IT公司待遇—公司更多,数据更加真实(最终版)
- 学习处理数组子集和的算法
- 初写类
- 新的篇章,即将开启
- webBrowser 参数设置
- C# TextBox实现全选
- 一个可以直接使用的MsgBox基于form居中API
- win7给C盘扩容
- C# 解析bt种子
- Android下的Activity的四种启动模式