c – 嵌套循环的任意数量?

前端之家收集整理的这篇文章主要介绍了c – 嵌套循环的任意数量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找任意数量的列表(例如[2,1,4 …],[8,3,…],…)并从每个列表中选择数字,以便生成所有排列.例如.:

[2,8,…]
[2,…]
[1,…]
[4,…]

这很容易使用嵌套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的组合.

猜你在找的C&C++相关文章