二维阵列4x4,对角线的产物?

时间:2016-03-16 17:49:47

标签: c++ arrays multidimensional-array

我试图在4x4阵列中获取所有对角线数字的乘积。我知道如何抓取数字并打印出来,但我不确定如何获取它们的产品,我如何计算8个数字的乘积?

#include <iostream>
using namespace std;

for (int row = 0; row < 4; row++)
{
for (int column = 0; column < 4; column++)
{
    if (row==column || row == 3 - column)
    {
        double product = 1;
        product *= arr[row][column] 
        cout << product << ".";
    }
}
}

2 个答案:

答案 0 :(得分:0)

注意:

  • 只有7个对角元素。您正在计算矩阵中心的元素两次。
  • 您不需要迭代整个数组以了解对角线。正如您所观察到的那样,对角线具有row == column的良好属性,您只需要沿着对角线进行迭代。

为了使事情更清晰,更容易,分别计算两个对角线产品:

double product = 1;
for (int row = 0; row < 4; row++) {
    product *= arr[row][row]
}
for (int row = 0; row < 4; row++) {
    product *= arr[row][4 - (row + 1)]
}

如果你一次考虑每一行中的两个条目,你还必须考虑到中间元素出现在两个对角线中的事实,这使得代码不必要地混乱。

答案 1 :(得分:0)

为什么要在循环中定义变量product,这就是为什么存储在变量中的先前数据在超出范围时会丢失的原因。

#include <iostream>
using namespace std;

double product = 1; // var product should be defined out of the loop

for (int row = 0; row < 4; row++)
{
for (int column = 0; column < 4; column++)
{
    if (row==column || row == 3 - column)
    {
        product *= arr[row][column];
    }
}
}

cout << product << ".";