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 组合的数量的主要内容,如果未能解决你的问题,请参考以下文章