我正在尝试转换以下3个循环:

for (a = 1; a < amax; a++) {
    for (b = 1; b < bmax; b++) {
        for (c = 1; c < cmax; c++) {
            ...
        }
    }
}

到一个循环。

我已经试过了:
for (abc = 0; abc < (amax * bmax * cmax); ++abc)
{
    a = abc / (bmax * cmax) + 1;
    b = (abc % (bmax * cmax)) / cmax + 1;
    c = (abc % (bmax * cmax)) % cmax + 1;

    ...
}

但是,这并不等同。逻辑错误在哪里?

最佳答案

a循环具有amax-1迭代,而不是amax迭代。同上bc循环。因此,单个循环应具有(amax-1)*(bmax-1)*(cmax-1)迭代。

要提取abc值将单循环索引视为混合基数(乘以基数即可找到迭代次数),即简单的整数除法和余数运算。

将每个结果值加1。

10-06 14:32