C++ 中没有嵌套循环的 2 组合,其中迭代次数等于 2 组合的数量

Posted

技术标签:

【中文标题】C++ 中没有嵌套循环的 2 组合,其中迭代次数等于 2 组合的数量【英文标题】:2-combination without nested loop in C++ where the number of iterations is equal to the number of 2-combinations 【发布时间】:2018-10-11 12:50:55 【问题描述】:

这是一个代码示例,可以生成所有可能的 2 组合而不重复:

int datanum = 4;
    for (int arg = 0; arg < datanum*datanum; arg++)
    
        int j = arg % datanum;
        int i = arg / datanum;

        if (i < j)
        
            std::cout << "i=" << i << " j=" << j << std::endl;
        
    

输出:

i=0 j=1
i=0 j=2
i=0 j=3
i=1 j=2
i=1 j=3
i=2 j=3

我的问题是:如何仅使用一个循环生成 2 组合而不重复,其中迭代次数应等于 2 组合的数量(在 N=4 的情况下,它应该是 6 而不是 4* 4=16 就像我目前的解决方案一样)?

【问题讨论】:

@HolyBlackCat 输出不是已经出现在问题中了吗?据我了解,这个问题是关于改进算法(目前需要 16 次迭代,它会跳过不必要的条目,目标是正好需要 6 次,并且不跳过任何条目)。 【参考方案1】:

这个怎么样:

int datanum = 4;
int i = 0;
int j = 1;
while (i < datanum-1) 

    std::cout << "i=" << i << " j=" << j << std::endl;
    j++
    if (j == datanum) 
        i++;
        j = i + 1;
    

【讨论】:

以上是关于C++ 中没有嵌套循环的 2 组合,其中迭代次数等于 2 组合的数量的主要内容,如果未能解决你的问题,请参考以下文章

Django模板:获取嵌套循环的总迭代次数

使用嵌套循环迭代 m^n 组合[关闭]

python中的if循环怎么样?

在python中迭代未知数量的嵌套循环

Linux Shell 嵌套循环

嵌套的while循环在第一次迭代PHP后停止