从每组中依次选择一个元素
2013-06-23 02:18
134 查看
从每组中依次选择一个元素
假设有N组元素,从N组中依次选取一个元素组成一个序列。假如N组元素的个数依次为A1,A2,…,AN,那么得到的序列数应该为A1*A2*…*AN。
下面我们关注的是如何生成A1*A2*…*AN个序列。由于N是个变量,如果是用N个循环实现,只能针对特定的N个组的情况。并且如果N很大时,实现起来不现实。
这里我们采用递归的方法来实现。
假设有N组元素,从N组中依次选取一个元素组成一个序列。假如N组元素的个数依次为A1,A2,…,AN,那么得到的序列数应该为A1*A2*…*AN。
下面我们关注的是如何生成A1*A2*…*AN个序列。由于N是个变量,如果是用N个循环实现,只能针对特定的N个组的情况。并且如果N很大时,实现起来不现实。
这里我们采用递归的方法来实现。
// 递归实现 #include <iostream> #include <vector> #include <string> using namespace std; void foo(const vector<vector<string> >& src, int x, int n, int& total, vector<vector<string> >& obj, vector<string>& hod) { for (vector<string>::size_type i = 0; i != src[x-1].size(); ++i) { if (x == n) { hod.push_back(src[x-1][i]); ++total; obj.push_back(hod); hod.pop_back(); } else { hod.push_back(src[x-1][i]); foo(src, x+1, n, total, obj, hod); hod.pop_back(); } } } int main() { vector<vector<string> > src; vector<string> tmp; tmp.push_back("a"); tmp.push_back("b"); tmp.push_back("c"); src.push_back(tmp); tmp.clear(); tmp.push_back("h"); tmp.push_back("i"); tmp.push_back("j"); src.push_back(tmp); tmp.clear(); tmp.push_back("s"); tmp.push_back("t"); tmp.push_back("u"); tmp.push_back("v"); src.push_back(tmp); tmp.clear(); tmp.push_back("x"); tmp.push_back("y"); tmp.push_back("z"); src.push_back(tmp); tmp.clear(); int total = 0; vector<vector<string> > obj; vector<string> hod; foo(src, 1, src.size(), total, obj, hod); for (vector<vector<string> >::size_type i = 0; i != obj.size(); ++i) { for (vector<string>::size_type j = 0; j != obj[i].size(); ++j) { cout << obj[i][j] << ' '; } cout << endl; } cout << total << endl; cout << obj.size() << endl; cout << hod.size() << endl; system("PAUSE"); return 0; }
![](http://images.cnitblog.com/blog/463570/201306/23021746-ac3d1da9f1024c7a9006d142afc398b3.jpg)
相关文章推荐
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- php使用array_rand()函数从数组中随机选择一个或多个元素
- css 加号 选择器 加号 选择临近紧贴后面的一个元素
- Jquery选择器 选择一个不存在的元素 为什么不会返回 false
- 【每天一个JQuery特效】以卷帘效果展开或收缩被选择的元素(2)
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位
- 选择只有一个孩子的元素
- 二、 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- php array_rand()函数从数组中随机选择一个或多个元素
- 让数组内的元素依次调用同一个方法
- 一个关于数组中满足条件的元素选择、及再次排序得c语言函数。
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- 最小区间使得至少包含每组元素中的一个
- iOS开发,一个数组,里面的元素依次的向后移动,移出的元素依次补到第一个位置
- 随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。
- 顺序栈S中有2n个元素,从栈顶到栈底的元素依次为a2n、a2n-1、…、a1。试设计一个算法:通过一个循环队列重新排列该栈中的元素,使得从栈顶到栈底的元素先偶数,后奇数
- 1、使用快速枚举语法实现: //构建一个NSSMutableArray数组,用@”1”至@”100”进行填充。以NSLog依次打印数组中的内容,将此数组分为奇偶两数组,再打印两新数组中的元素。
- 将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。
- 编写一个程序,循环从键盘接收一批学生的某门课的成绩,并依次保存在数组score的相应元素中,直到输入的成绩为999时结束。