在一个数组中找到等于某个数的组合
来源:互联网 发布:javascript对象构造器 编辑:程序博客网 时间:2024/05/14 08:51
方法1:
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<vector>#include <algorithm>#include<iostream>using namespace std;void getResult(vector<int> a,int result) {sort(a.begin(),a.end());int nLen = a.size();for (int i = 0; i < nLen; i++) {if (a[i] == result)cout<<a[i]<<endl;for (int j = i + 1; j < nLen; j++) {if (a[i] + a[j] > result)break;if (a[i] + a[j] == result){cout<<a[i]<<"+"<<a[j]<<endl;} else {for (int k = j + 1; k < nLen; k++){if (a[i] + a[j] + a[k] > result)break;if (a[i] + a[j] + a[k] == result) {cout<< a[i]<< "+"<<a[j]<<"+"<<a[k]<<endl;} else{for (int l = k + 1; l < nLen; l++){if (a[i] + a[j] + a[k] + a[l] > result)break;if (a[i] + a[j] + a[k] + a[l] == result)cout<<a[i]<<"+"<< a[j]<< "+" <<a[k]<<"+"<<a[l]<<endl;//else继续,有点复杂。 }}}}}}}void main() {vector<int> a;a.push_back(11);a.push_back(2);a.push_back(3);a.push_back(1);a.push_back(4);a.push_back(10);a.push_back(23);a.push_back(7);a.push_back(8);a.push_back(9);a.push_back(6);a.push_back(12);getResult(a,10);system("pause");}
#include <list>#include <vector>using namespace std;typedef vector<double> ListD;typedef vector<ListD> ListLD;//给定一个数字数组,从这个数组中找出所有的组合,使组合中各数字相加等于一个给定数值 //nums = 给定数组 //num = 给定数值//index = 当前操作的数字在数组中的index//count = 存储所有组合的可能数//results = 存储所有组合的情况void NumCount(double nums[], double num, int index, int &count, ListLD &results,int NumLen) {//当前操作的数字=给定数值 if (nums[index] == num) { //保存此组合 results[results.size() - 1].push_back(nums[index]); count += 1; //清空缓存并将除了此数之外的此组合的另外的数字存入缓存里 ListD TmpList;results.push_back(TmpList); for (int i = 0; i < results[results.size() - 2].size() - 1; i++) { results[results.size() - 1].push_back(results[results.size() - 2][i]); } if (index == - 1) { return; } //进入到下一递归 NumCount(nums, num, index + 1, count, results,NumLen); } //大于给定数,跳过此数,进入到下一次递归 else if (nums[index] > num) { if (index == NumLen - 1) { return; } //此组合无效,跳到下一递归 NumCount(nums, num, index + 1, count, results,NumLen); }//小于给定数,则保存此数至缓存之后,给定数减去此数,然后进入下一次递归,之后将此数从缓存中删除 else { if (index == NumLen - 1) { return; } results[results.size() - 1].push_back(nums[index]);//给定数减去此数 int tempNum = num - nums[index];//进入到下一递归 NumCount(nums, tempNum, index + 1, count, results,NumLen); //将此数从缓存中删除 ListD::iterator itr= results[results.size() - 1].begin(); itr+=(results[results.size() - 1].size() - 1); results[results.size() - 1].erase(itr); if (index < NumLen - 1) {//再跳过过此数,给定数不变,进入到下一次递归 NumCount(nums, num, index + 1,count,results,NumLen); } } } int main(){double test[10] = {1,2,3,4,5,6,7,8,9,10};ListLD testList;int a = 0,b=0;NumCount(test,10,a,b,testList,10);return 0;}
此代码运行出错,我根据C#翻译的,原文地址
http://sumice.name/A/Index/86
0 0
- 在一个数组中找到等于某个数的组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 有一个整数数组,然后有一个数m,要找到整数数组中,所有和等于m的组合,并输出。
- 求数组中两两相加等于某个数的组合种数
- 第十四题:在一个排序数组中查找一对数,使得其和等于某个值
- 【算法题】数组中找到两个数,使其和等于某个数
- :输入10个整数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!
- java 数组中两两相加等于某个数的组合种数 蛮力解法 排序解法
- 笔试题:写一个有序整数数组两两之和等于某个数所有组合
- 在一个数组中找到最大的两个数
- 从一个数组中找出几个数,使其相加等于某个值的算法(数组元素可以重复)
- 在数组中求出两个数,使他们的和等于给定的一个数
- 给一个有序数组和一个数s,求数组中两数和等于s的组合
- 在一个数组中,找出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 数组中两个数之和等于某个数字,返回这两个数的下标
- 【C语言】在两个数成对出现的数组中找到一个单独的数。
- C#之LINQ基础 一个int型数组找到其中等于指定数的成员
- tq210 nand配置
- Android屏幕截图功能
- -1 resource temporarily unavailable
- 一瓢江湖我沉浮 我寻你千百度 又一岁荣枯
- 你灰色头像不会再跳动 哪怕是一句简单的问候
- 在一个数组中找到等于某个数的组合
- C#中异步和多线程的区别
- Android开发规范
- Smack类库详细介绍
- Android Launcher如何去掉进入应用时的动画效果?
- Socket函数说明
- POJ-3050-Hopscotch
- 在C#中解决动态计算表达式的问题(如字符串"Sin(1)+Cos(2)",执行并得出结果)
- 常用的英语缩写含义