了解带索引修改的嵌套循环

Understanding nested loops with index modification

本文关键字:嵌套循环 修改 索引 了解      更新时间:2023-10-16

我有一个家庭作业问题,要求我用几句话描述下面的代码做了什么,但家庭作业没有解决方案。我正在努力了解它的作用,以便为下面的评估做准备。

它循环两次直到数字,但每次有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;
}