数组------和为定值的多个数
2016-05-14 10:43
330 查看
题目描述;
给定两个整数sum和n,要求在1, 2, 3, …, n中找到所有和为sum的组合.
eg: sum = 6, n = 6
1 2 3 4 5 6
输出:
6
5 + 1
4 + 2
3 + 2 + 1
分析:
使用递归的方式考虑,原问题可以分割为在你1, 2 , … , n -1中找和为sum - n的问题(sumOfNumber(sum - n, n - 1))和在1, 2, … , n - 1中找和为sum的问题(sumOfNumber(sum, n - 1)).
给定两个整数sum和n,要求在1, 2, 3, …, n中找到所有和为sum的组合.
eg: sum = 6, n = 6
1 2 3 4 5 6
输出:
6
5 + 1
4 + 2
3 + 2 + 1
分析:
使用递归的方式考虑,原问题可以分割为在你1, 2 , … , n -1中找和为sum - n的问题(sumOfNumber(sum - n, n - 1))和在1, 2, … , n - 1中找和为sum的问题(sumOfNumber(sum, n - 1)).
#include <iostream> #include <vector> using namespace std; void sumOfNumber(int sum, int n); vector<int> vec; int main() { int sum, n; cout << "Input n: "; cin >> n; cout << "Input sum: "; cin >> sum; sumOfNumber(sum, n); return 0; } void sumOfNumber(int sum, int n) { if(n <= 0 || sum <= 0) return ; if((n * (n + 1))/2 < sum) return ; if(sum == n) { for(vector<int>::iterator it = vec.begin(); it != vec.end(); it++) { cout << *it << " + "; } cout << n << endl; } vec.push_back(n); //将n放入解数组,表示n是一个解. sumOfNumber(sum - n, n - 1); vec.pop_back(); //将n从解数组中删除,表示n不是一个解. sumOfNumber(sum, n - 1); }
相关文章推荐
- c++开发ocx入门实践三--基于opencv的简易视频播发器ocx
- C++——中的虚函数(Virtual function)
- 三个作业题
- 十进制、二进制互转
- Codeforces Round #157 (Div. 1) B. Little Elephant and Elections 数位dp
- C++纯虚函数作为接口类举例
- Lua中__index和__newindex实践
- js基础
- 第六次作业
- 更新hosts
- 2016-05-14 10:29
- 最大报销额(hdu 1864)
- 常用sql
- 日历
- Announcing SyntaxNet: The World’s Most Accurate Parser Goes Open Source
- Java-split函数-分割字符串
- 单链表的反转
- HDU 1017 A Mathematical Curiosity【水题】
- Java千百问_06数据结构(015)_数组和普通对象的引用变量有什么区别
- 最优化学习笔记(二)——二分法