输入两个整数 n 和 m,从数列 1,2,3.......n 中随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
2015-01-07 20:54
573 查看
#include <iostream>
#include <vector>
using namespace std;
// 显示组合
void showCombination(const vector<int>& s)
{
for(int i = 0; i < s.size(); ++i)
{
cout << s[i] << ' ';
}
cout << endl;
}
// 1到n随机取出几个数使其和等于m
void findCombination(int i, int n, int m, vector<int>& s)
{
// 当前数字超出范围,或加上当前数字后会大于总和
if(i > n || i > m)
{
return;
}
else if(i == m) // 加上当前数字正好等于总和
{
s.push_back(i);
showCombination(s);
s.pop_back();
}
else // 加上当前数字后仍然小于总和
{
// 加上当前数字
s.push_back(i);
findCombination(i + 1, n, m - i, s);
s.pop_back();
// 不加上当前数字
findCombination(i + 1, n, m, s);
}
}
int main(int argc, char* argv[])
{
vector<int> s;
findCombination(1, 5, 6, s);
return 0;
}运行结果:
1 2 3
1 5
2 4
#include <vector>
using namespace std;
// 显示组合
void showCombination(const vector<int>& s)
{
for(int i = 0; i < s.size(); ++i)
{
cout << s[i] << ' ';
}
cout << endl;
}
// 1到n随机取出几个数使其和等于m
void findCombination(int i, int n, int m, vector<int>& s)
{
// 当前数字超出范围,或加上当前数字后会大于总和
if(i > n || i > m)
{
return;
}
else if(i == m) // 加上当前数字正好等于总和
{
s.push_back(i);
showCombination(s);
s.pop_back();
}
else // 加上当前数字后仍然小于总和
{
// 加上当前数字
s.push_back(i);
findCombination(i + 1, n, m - i, s);
s.pop_back();
// 不加上当前数字
findCombination(i + 1, n, m, s);
}
}
int main(int argc, char* argv[])
{
vector<int> s;
findCombination(1, 5, 6, s);
return 0;
}运行结果:
1 2 3
1 5
2 4
相关文章推荐
- <仅是自己做笔记。。。系列-13>输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 21.输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合出来---经典数据结构第21道
- 输入两个整数n和m,从数列1,2,3....n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来
- 输入两个整数n和m,从数列1,2.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3…….n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
- PHP 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来
- 第21 题 2010 年中兴面试题 编程求解: 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来.
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来.
- 输入两个整数n和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m,要求将其中所有的可能组合列出来。
- 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来
- 输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.