了解带索引修改的嵌套循环
Understanding nested loops with index modification
我有一个家庭作业问题,要求我用几句话描述下面的代码做了什么,但家庭作业没有解决方案。我正在努力了解它的作用,以便为下面的评估做准备。
它循环两次直到数字,但每次有3或5的倍数时,循环条件就会改变,这让我很困惑
unsigned int g(unsigned int l) {
unsigned int i { 0 };
unsigned int j { 0 };
unsigned int k { 0 };
while (i < l) {
while (j < l) {
if (j % 3 == 0) {
i = i - 1;
j = j + 1;
break;
}
if (j % 5 == 0) {
i = i - 1;
j = j + 1;
break;
}
k += j;
++j;
}
++i;
}
return k;
}
我以为它计算的是这个数字的平方减去n以下出现的3和5的倍数(n-3的倍数-5的倍数(^2,但它每隔一段时间就会减少1或2。我只是在结尾遗漏了一些小东西,还是误解了这个问题?
此代码只将所有不可被3或5整除的数字相加(但不包括(l
。
递增j
是这里使用的主要环路控制。您将看到,无论执行哪个分支,每个迭代都会向其添加1。
由于break
语句的缘故,递减i
是必要的。基本上,它只是保持循环中的位置,即i = i - 1
,突破内循环,i = i + 1
,继续外循环&则内循环从下一个CCD_ 7开始。
函数可以用这样的单个循环来表示&仍然得到相同的结果:
unsigned int g(unsigned int l) {
unsigned int j { 0 };
unsigned int k { 0 };
while (j < l) {
if (!(j % 3 == 0 || j % 5 == 0)) {
//Add to total if not divisible
k += j;
}
++j; //Loop control
}
return k;
}
对于其他想知道该解决方案的人来说,它将小于l的数字相加,这些数字不是3或5的倍数。下面可以找到该代码的更简单版本。
unsigned int n{0};
unsigned int sum{0};
while(n < l){
if((n % 3 != 0) && (n % 5 != 0)){
sum += n;
}
++n;
}
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 无法掌握嵌套循环的写作技巧
- 在 c++ 中实现嵌套循环的更短方法吗?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 2 个嵌套循环的时间复杂度
- 嵌套循环背后的逻辑
- 使用 %s C++嵌套循环
- 嵌套循环和重复迭代器
- 如何在 c++ 下使用嵌套循环和正则表达式降低时间复杂度?
- C++在乘法图中放置随机值(嵌套循环)
- 如何使用 OpenMP 减少嵌套循环?
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- 学习嵌套循环C++与示例混淆
- 如何在CUDA中嵌套循环
- std::vector上的嵌套循环
- 具有动态数组分配的OpenMP嵌套循环
- 了解带索引修改的嵌套循环