- 论坛徽章:
- 59
|
这个好办, 两个Loop就好了
原始数据:
1 2
44 555 66
88 9
有三行数据,设一个长度为两3的数组:
一个表示长度: 2 3 2
一个表示当前计数
0 0 0
当前计数加1,直到 121为止~
算法如下:- #include <vector>
- #include <stdio.h>
- void permulation_next(const std::vector<std::vector<int>>& meta, std::vector<int>& ic){
- // +1
- int icarry =1;
- for(size_t irow =0; irow <meta.size(); irow++){
- int iv =icarry +ic[irow];
- ic[irow] =iv;
- if(iv ==(int)meta[irow].size()){
- icarry =1;
- ic[irow] =0;
- }else{
- icarry =0;
- break;
- }
- }
- }
- int main(){
- int params[][3]={
- {1,2,},
- {44, 555, 66,},
- {88, 9,},
- };
- int nlen[] ={2,3,2};
- std::vector<std::vector<int>> meta;
- for(int irow =0; irow <_countof(params); irow ++){
- std::vector<int> rows;
- for(int iitem =0; iitem <nlen[irow]; iitem++){
- rows.push_back(params[irow][iitem]);
- }
- meta.push_back(rows);
- }
- std::vector<int> ic;
- int nloops =1;
- for(int irow =0; irow <_countof(params); irow++){
- ic.push_back(0);
- nloops *=nlen[irow];
- }
- for(int iloop =0; iloop <nloops; iloop++){
- for(size_t irs =0; irs <ic.size(); irs++){
- printf("%d ",meta[irs][ic[irs]]);
- }
- puts(" --");
- permulation_next(meta,ic);
- }
- return 0;
- }
复制代码 |
|