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

时间:2018-10-11 12:50:55

标签: c++ algorithm math

这是一个代码示例,该代码示例无需重复即可生成所有可能的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就像我当前的解决方案一样)?

1 个答案:

答案 0 :(得分:3)

这如何:

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;
    }
}