c – 嵌套循环的任意数量?
发布时间:2020-12-16 05:59:37 所属栏目:百科 来源:网络整理
导读:我正在寻找任意数量的列表(例如[2,1,4 …],[8,3,…],…)并从每个列表中选择数字,以便生成所有排列.例如.: [2,8,…] [2,…] [1,…] [4,…] … 这很容易使用嵌套for循环完成,但是由于我想要它接受任意数量的列表,似乎for循环必须是硬编码.每个列表一个.此外,
我正在寻找任意数量的列表(例如[2,1,4 …],[8,3,…],…)并从每个列表中选择数字,以便生成所有排列.例如.:
[2,8,…] 这很容易使用嵌套for循环完成,但是由于我想要它接受任意数量的列表,似乎for循环必须是硬编码.每个列表一个.此外,由于我的程序可能会产生数以万计的排列,所以我想一次生成一个排列(而不是一次计算它们,并将结果存储到一个向量中).有没有办法完成这个程序? 由于在编译时知道列表的数量,所以我想也许我可以使用基于模板的元编程.但这似乎很笨拙,也不符合“一个一个”的要求.有什么建议么? 解决方法
您可以使用计数的基本原理,例如递增最后一位数,直到达到最大值,然后增加最后一位数,等等,如倒计时
这是一个示例代码,假设可能有diff列表的diff长度. #include <iostream> using namespace std; int main() { int n; cin>>n; int a[n],len[n],i,j; for(i = 0 ; i < n ; i++) { cin>>len[i]; a[i]=0; } while(1) { for(i = 0 ; i< n;i++) cout<<a[i]<<" "; cout<<endl; for(j = n-1 ; j>=0 ; j--) { if(++a[j]<=len[j]) break; else a[j]=0; } if(j<0) break; } return 0; } 尝试用4 1 1 1 1运行代码,它将给出0和1的所有4位排列. 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 您可以使用2d数组来获取nos的组合. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读