以下是对角线左上角到右下角的总和:
public int sumarDiagonal()
{
int x = 0;
for (int F = 0; F < Filas; F++)
{
for (int c = 0; c < Columnas; c++)
{
if (F == c)
{
x += m[F,c];
}
}
}
return x;
}
如何从右上角到左下角?
答案 0 :(得分:2)
具有两个嵌套循环的原始代码效率不高。 最好这样做:
public int sumarDiagonal()
{
int x = 0;
for (int i = 0; i < Math.Min(Filas,Columnas); ++i)
x += m[i,i];
return x;
}
public int sumarAntiDiagonal()
{
int x = 0;
for (int i = 0; i < Math.Min(Filas,Columnas); ++i)
x += m[Filas - 1 - i,i];
return x;
}
答案 1 :(得分:1)
您实际上不需要查看每个系数:
public int sumarDiagonal()
{
int x = 0;
int length = Math.Min(Filas,Columnas); // Can deal with rectangular cases
for (int i = 0; i < length; i++)
x += m[i,length-1-i];
return x;
}
答案 2 :(得分:0)
只需反转您的索引,如下所示:
public int sumarDiagonal()
{
int x = 0;
for (int F = 0; F < Filas; F++)
{
x += m[F,Filas-F-1];
}
return x;
}
这假设是一个正方形数组,因此对于10x10,第一个点是[0,9],第二个是[1,8]等。
答案 3 :(得分:0)
如何更换
if (F == c)
与
if (F + c + 1 == Filas)
编辑:已更新为基于0的阵列
的帐户答案 4 :(得分:0)
public int diagX()
{
int x;
x = 0;
for (f = 1; f <= filas; f++)
{
for (c = columnas; c >= 1; c--)
{
if (f > c || f < c)
{
x += a[f, c];
}
else
{
continue;
}
}
}
return x;
}
例如这段代码: 如果你有 1,2 3,6 而你想穿过诊断你必须拿[2,1]你会得到2。 并且在循环时你会继续使用其他因为得到值2之后。 它将是[2,2],因为f == c为false然后你不会回到第一个循环。为什么f == c是假的,因为如果你想跨矩阵的diag搜索你不能从f == c得到价值。例如: 如果上面的矩阵我们循环但可以等于f和c。我们可以得到: (a [2,1] = 2)+(a [2,2] = 6)= 8 nah!你可以在这段代码中看到很大的错误。