C++动态嵌套的循环
C++ dynamic nested for loop
我正在尝试使用动态循环数计算以下数量。伪代码看起来像
当 k = 1 时,
for (x1 =0;x1<=nmax[1];x1++){
a = a + x1 * (x1>upper[1]);
}
当 k = 2 时
for (x1 =0;x1<=nmax[1];x1++){
for (x2 =0;x2<=nmax[2];x2++){
a = a + x1 * (x1<upper[1]) * x2 *(x1+x2>upper[2]);
}
}
当 k = 3 时
for (x1 =0;x1<=nmax[1];x1++){
for (x2 =0;x2<=nmax[2];x2++){
for (x3 =0;x3<=nmax[3];x3++){
a = a + x1 * (x1<upper[1]) * x2 *(x1+x2<upper[2]) * x3 *(x1+x2+x3>upper[3]);
}
}
}
nmax 和上限是预定义的向量。
为了说明布尔表达式背后的逻辑,例如,随着 k 的增加,布尔表达式的发展如下。对于第一个到最后一个之前的第二个,它是<;而最后一个使用>。
(x1>upper[1])
(x1<upper[1]) AND (x1+x2>upper[2])
(x1<upper[1]) AND (x1+x2<upper[2]) AND (x1+x2+x3>upper[3])
(x1<upper[1]) AND (x1+x2<upper[2]) AND (x1+x2+x3<upper[3]) AND (x1+x2+x3+X4>upper[4])
(x1<upper[1]) AND (x1+x2<upper[2]) AND (x1+x2+x3<upper[3]) AND (x1+x2+x3+x4<upper[4]) AND (x1+x2+x3+x4+x5>upper[5])
有没有办法编写一个使用 k 作为参数的函数来实现上述目标?
我建议你使用递归函数。
int k;
int nestedLoop(int cur, int stValue) {
int ret = 0;
if( cur > k ) return 1;
for(x=0;x<=nmax[cur];x++) {
if( cur % 2 ) {
ret = ret + x *
(stValue+x < upper[cur]) * nestedLoop(cur+1, stValue + x);
} else {
ret = ret + x *
(stValue+x > upper[cur]) * nestedLoop(cur+1, stValue + x);
}
}
return ret
}
很抱歉,我现在无法测试它是否正确。但是你想要的方式是通过这种方法实现的。
只为简单案例
int k = 3;
int nestedloop(int cur) {
if(cur > k) { return 1; }
int ret = 0;
int i;
for(int i=1;i<=5;i++) {
ret = ret + i * nestedloop(cur+1);
}
return ret == 0 ? 1 : ret;
}
此代码与下一个代码相同。
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
for(int k=1;k<=5;k++){
ret = ret + i * j * k;
}
}
}
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 嵌套for循环C++的问题(初学者)
- 嵌套While循环不起作用(C++问题)
- 无法掌握嵌套循环的写作技巧
- 嵌套的 for 循环不循环通过第二个数组
- 在 c++ 中实现嵌套循环的更短方法吗?
- 嵌套在循环中的两个循环的 big-O 表示法
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 具有嵌套 if-else 的循环的时间复杂度
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 如何编写嵌套的 for 循环
- 如何在C++中创建 if else 循环而不是多个嵌套?
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 为循环嵌套的变量快速生成数字组合
- 为循环嵌套的C++压缩
- 为循环嵌套的变量
- 使用foreach循环嵌套的QHash