我想知道我是否可以使用一些伪代码来解决以下问题
我需要遍历2d数组(我正在处理的方法采用int)。它从传入的值的位置开始,然后向下,直到它达到左侧的相同值。当它这样做时,2d数组中的每个int都被添加到局部变量中。 现在我们处于(x,x)位置?然后从这里我需要循环到右边将所有变量添加到相同的先前局部变量然后返回该数字
用于说明目的的2d数组看起来像这样的例如
1 2 3 4
2 3 4 5
1 2 3 4
3 2 1 4
所以,如果我传入2,我们将从3号顶线开始,我猜,我们将循环到位置3,3(3 + 4 + 3)然后循环到右边直到结束(+ 4)
这些数字将被添加并返回。
我希望伪代码是可能的,我还没有给它自己已经大声笑(因此证明我不能实际编码它大声笑:D)
如果没有任何例子你可以提供给我的帮助我:D
谢谢你们
答案 0 :(得分:0)
不确定您要实现的目标,我认为这只是一项任务。 如果你是向右循环,如果不是2,也不应该包括1?
即。然后循环到右边直到结束(+ 1 + 4)
答案 1 :(得分:0)
答案取决于您是存储列还是矩阵行。假设您有一个n * n
大小矩阵并存储行,那么
A = [[1,2,3,4], [2,3,4,5], [1,2,3,4], [3,2,1,4]]
并且起点是i
,你应该从数组号开始。 m = i div n
(除法的整数部分,向下舍入),在数组内部,凝视元素应为no。 p = i mod n
(模数)。从那时起,您可以选择从m
到n
的每个数组,并在每个数组中选择p
元素,直到最新元素与原始元素相同。 / p>
在类似Java的代码中:
int n = 4;
int[][] A = new int[n][n];
... // initialize A
int sumValues(int i) {
int original = A[i/n][i%n];
int sum = original;
int p = i % n;
for (m = i/n + 1, m<n, ++m) {
if (A[m][p] != orginal) sum += A[m][p];
else break;
}
return sum;
}
如果要存储列,那么
A = [[1,2,1,3], [2,3,2,2], [3,4,3,1], [4,5,4,4]]
然后m
和p
被反转,这意味着从A
开始,您应该选择数组号。 m = i mod n
并在该数组中,元素号。 p = i div n
。在此之后,您将保留所选的数组,只需增加p
,直到A[m][p]
等于最初选择的值。
在类似Java的代码中:
int n = 4;
int[][] A = new int[n][n];
... // initialize A
int sumValues(int i) {
int original = A[i%n][i/n];
int sum = original;
int p = i / n;
for (p = i/n +1, p<n, ++p) {
if (A[m][p] != orginal) sum += A[m][p];
else break;
}
return sum;
}
但如果我错了,请纠正我:)
答案 2 :(得分:0)
我认为这个伪代码应该可以满足您的需求:
array[][] := ...
position := ...
sum := 0
//add the contents of the outer array
for i := 0 to array.length do
sum := sum + array[i][position]
//if we're at (pos, pos) then start looping over the inner array
if i = position then
//note we start at pos + 1 so as not to count array[i][position] twice
for j := position + 1 to array[j].length do
sum := sum + array[i][j]
end
break from loop
end
end