嵌套For循环中的奇怪行为 首先,我对C++很陌生,所以尽量不要对我太苛刻。我写了这段代码: int LargestProduct (string numStr, int groupSize) { int numOfGroups = numStr.size() / groupSize; int groupsRemaining = numStr.size() % groupSize; int largestProduct = 0, thisProduct = 1; for (int i = 1; i <= numOfGroups; i++) { for (int j = i; j <= groupSize; j++) thisProduct *= (numStr[j-1] - '0'); if (thisProduct > largestProduct) largestProduct = thisProduct; thisProduct = 1; } // .. A bit more irrelevant code here return largestProduct; }

嵌套For循环中的奇怪行为 首先,我对C++很陌生,所以尽量不要对我太苛刻。我写了这段代码: int LargestProduct (string numStr, int groupSize) { int numOfGroups = numStr.size() / groupSize; int groupsRemaining = numStr.size() % groupSize; int largestProduct = 0, thisProduct = 1; for (int i = 1; i <= numOfGroups; i++) { for (int j = i; j <= groupSize; j++) thisProduct *= (numStr[j-1] - '0'); if (thisProduct > largestProduct) largestProduct = thisProduct; thisProduct = 1; } // .. A bit more irrelevant code here return largestProduct; },c++,C++,这就是真正发生的事情: +--------+---------+ | i | j | +--------+---------+ | 1 | 1 | | 1 | 2 | | 2 | 2 | +--------+---------+ 突然,程序抛出了一个错误的结果(6,而不是72) 但至少可以说,这似乎违反直觉。变量i从0到numfogroups,在上例中等于5。另一方面,j从i到groupSize,正好是2

这就是真正发生的事情:

+--------+---------+
|   i    |    j    |
+--------+---------+
|    1   |    1    |
|    1   |    2    |
|    2   |    2    |
+--------+---------+
突然,程序抛出了一个错误的结果(
6
,而不是
72

但至少可以说,这似乎违反直觉。变量
i
0
numfogroups
,在上例中等于
5
。另一方面,
j
i
groupSize
,正好是
2

应该有
5*2=10次
迭代,但只有
3次
。此外,在最后一次迭代中,j应该“重新初始化”为
0
。但这并没有发生

有人请帮助这个C++新手吗?< /P>
编辑 问题是j-for-loop的范围从移动索引(
i
)到非移动索引(
groupSize
)。这导致了第二个for循环中的“收缩”效应,通过更改这一行可以很容易地修复该效应:

for (int j = i; j <= groupSize; j++)
对于这一个:

int numOfGroups = numStr.size() - 1;

编辑2 现在一切都好了,谢谢你们的好意!我很感激。整个守则是:

int LargestProduct (string numStr, int groupSize) {
    int numOfGroups = numStr.size() - 1;
    int largestProduct = 0, thisProduct = 1;

    for (int i = 1; i <= numOfGroups; i++) {

        for (int j = i; j <= i + groupSize - 1; j++)
            thisProduct *= (numStr[j-1] - '0');

        if (thisProduct > largestProduct)
            largestProduct = thisProduct;

        thisProduct = 1;
    }
    return largestProduct;
}
int-LargestProduct(字符串numStr,int-groupSize){
int numOfGroups=numStr.size()-1;
int largestProduct=0,thisProduct=1;
对于(inti=1;i你说:

另一方面,j从0变为groupSize

但守则说:

for (int j = i; j <= groupSize; j++)

for(int j=i;j数组索引从0开始。感谢@manni66,我知道这一点,但犯了错误。但是这并不能解决问题。现在程序生成的是
2
,而不是
6
,但仅此而已。“在上一次迭代中,
j
应该“重新初始化”为0”-为什么要这样做?你的代码的哪一部分告诉了它?为什么投反对票?你的意思是让(int j=1;j@JoseLopezGarcia你真的确定单词是错的而不是代码吗?这与你期望的
j
在1和2之间切换是矛盾的。@nwp和Steve你都是对的。我的话是对的,代码是错的!我将删除这个问题,因为它的布局似乎非常糟糕,它得到了4张反对票alr好了。有什么建议下次不要投太多的反对票吗?我试图尽可能清楚地说明问题所在,并在背后表现出一些关注和努力。如果您觉得它回答了您的问题,请随意将其标记为答案:)至于反对票,我不能说——在我看来,这似乎没有太大的错误,但我自己在这里并没有特别的经验。@JoseLopezGarcia imho问题的一个问题是,代码和您的期望都是错误的。一般来说,它有助于提供可供他人编译和运行的代码(你错过了一条主线)。不要太担心落选票。你关心的是解决问题,而不是代表,对吗?是的@tobi303,但还有两三条,我将被禁止要求终身监禁。这很伤心,但我下次会做得更好。
int numOfGroups = numStr.size() - 1;
int LargestProduct (string numStr, int groupSize) {
    int numOfGroups = numStr.size() - 1;
    int largestProduct = 0, thisProduct = 1;

    for (int i = 1; i <= numOfGroups; i++) {

        for (int j = i; j <= i + groupSize - 1; j++)
            thisProduct *= (numStr[j-1] - '0');

        if (thisProduct > largestProduct)
            largestProduct = thisProduct;

        thisProduct = 1;
    }
    return largestProduct;
}
for (int j = i; j <= groupSize; j++)