我试图解决一个
dp
问题,并在制表过程中遇到了麻烦,因为通过正常方法,该矩阵将按行或按列填充,但我需要对角线的值,而不是按行或按列。你能为此提供一个合适的 for 循环吗?
看起来没那么难。从 0,0 开始执行第一个,然后向右移动,直到剩下任何一个并执行该操作,然后从 0,0 向下移动并从那里开始,然后这样做,直到完成为止。
– 500 - 内部服务器错误
外循环:应该有5次迭代
for (int a = 0; a < 5; a++)
内循环:迭代次数可变;我们用 x 来表示它。那么 x 应该依赖于这样的:
a = 0: x = 5
a = 1: x = 4
...
a = 4: x = 1
很容易看出a + x 是常数,所以x = 5 - a。内循环:
for (a = 0; a < 5; a++)
for (b = 0; b < 5 - a; b++)
现在用 (x,y) 表示第一个访问元素的坐标。
for (a = 0; a < 5; a++)
{
x = ...
y = ...
for (b = 0; b < 5 - a; b++)
{
}
}
尝试看看 (x,y) 如何依赖于 a。应该很简单。现在请注意如何在内循环内推进 (x,y)。
for (a = 0; a < 5; a++)
{
x = ...
y = ...
for (b = 0; b < 5 - a; b++)
{
// do stuff with element at (x,y)
// then advance x and y
++x;
++y;
}
}