有n个数,输出其中所有和为s的k个数的组合。
来源:互联网 发布:shell python传值 编辑:程序博客网 时间:2024/05/16 06:11
分析:此题有两个坑,一是这里的n个数是任意给定的,不一定是:1,2,3...n,所以可能有重复的数(如果有重复的数怎么处理?);二是不要求你输出所有和为s的全部组合,而只要求输出和为s的k个数的组合。
举个例子,假定n=6,这6个数为:1 2 1 3 0 1,如果要求输出和为3的全部组合的话,
- 1 2
- 1 2 0
- 0 3
- 1 1 1
- 1 1 1 0
而题目加了个限制条件,若令k=2,则只要求输出:[{1,2}, {0,3}] 即可。
#include <iostream>#include<list>#include<vector>using namespace std;#define SUM 20#define SIZE 10#define K 3#define HASHSIZE 9list<int> mylist;vector<int> hashvector;void initRandom(int* arr) {srand(unsigned(time(0)));for (int i = 0; i < SIZE; i++) {arr[i] = rand() % 10;}for (int i = 0; i < SIZE; i++) {cout << " " << arr[i];}cout << endl;}int getCurHash() {int hash = 0;for (list<int>::iterator it = mylist.begin(); it != mylist.end(); ++it) {hash |= (1 << *it);}return hash;}void sumOfkNum(int sum, int*arr, int i, bool &flag) {if (sum <= 0 || i == SIZE) {return;}if (sum == arr[i] && mylist.size() == K - 1) {int hash = getCurHash() | (1 << arr[i]);if (find(hashvector.begin(), hashvector.end(), hash)== hashvector.end()) {hashvector.push_back(hash);for (list<int>::iterator it = mylist.begin(); it != mylist.end();++it) {cout << *it << "+";}cout << arr[i] << endl;} else {return;}} else {if (mylist.size() > K) {return;}mylist.push_back(arr[i]);sumOfkNum(sum - arr[i], arr, i + 1, flag);mylist.pop_back();sumOfkNum(sum, arr, i + 1, flag);}}int main() {int* arr = new int[SIZE];bool flag = false;initRandom(arr);sumOfkNum(SUM, arr, 0, flag);if (hashvector.empty()) {cout << "no result" << endl;}return 0;}
0 0
- 有n个数,输出其中所有和为s的k个数的组合。
- java实现组合-n个数取其中k个数的所有组合
- 有10个数,从1到10,找出其中所有的和为20的组合
- 输出从n个数中选m个数的所有组合
- 给定两个整数n和k,返回1 ... n中k个数的所有可能组合。
- n个数的所有组合...
- 编写算法输出从n个数中取k个(k小于等于n)的所有组合
- hdu4982 是否存在k个数和为n并且存在其中k-1个数和为完全平方数的情况
- 给定n个数{1,2,3,...,n},从中选择任意两两不同的k个数,输出所有可能的组合
- 1-n,从中选择任意两两不同的k个数,输出所有可能的组合,要求不重不漏
- 输出N个数中取M个数的所有组合,排列情况
- 在n个数中找到和为t的所有组合,阿里笔试题目
- n中任取r个数的所有组合
- 所有组合, 所有排列的模板(从n个数中选m个数的所有组合和所有排列)
- 从n个数中选取m个数的所有组合
- 【华为 OJ 】输入n个数,输出其中最小的k个
- 输入n个数,输出最小的k个数,java实现
- 每天一道LeetCode-----找到1,2,...,n这n个数所有的组合,每个组合有k个元素,且元素大小递增
- AndroidStudio导入so库碰到Java.lang.UnsatisfiedLinkError
- S1 S2226关于S1的金牌考题测试分析 改错
- S2错题
- android 左划菜单 slidelibrary.jar用法
- C++ Maps & MultiMaps
- 有n个数,输出其中所有和为s的k个数的组合。
- URL的编码处理
- Linux shell 的 test 命令用法详解
- win7上python2.7连接mysql数据库
- 百度ue编辑器关闭自动抓取远程图片
- 微信PaxosStore:深入浅出Paxos算法协议
- Node在异步I/O上的优势实践
- 2016年度回顾:32本阅读量,杂而不精,虚而不实;2017年计划:专攻,求精,务实
- Bootstrap+web+Idea实现登录页面(含验证码)