我正在尝试转换以下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
迭代。同上b
和c
循环。因此,单个循环应具有(amax-1)*(bmax-1)*(cmax-1)
迭代。
要提取a
,b
和c
值将单循环索引视为混合基数(乘以基数即可找到迭代次数),即简单的整数除法和余数运算。
将每个结果值加1。