数组元素相乘的问题

时间:2019-02-01 23:59:52

标签: c#

基本上,我试图将第一个数组的每个元素与第二个数组的每个元素相乘,然后将它们全部存储在最后。我对编码还很陌生,所以只想学习就可以了,这确实让我陷入了困境。这是最终应做的例子。

ExampleArray1 = 5,6,7,8 
ExampleArray2 = 2,3,4

(5*2)+(5*3)+(5*4) + (6*2)+(6*3)+(6*4) + (7*2)+(7*3)+(7*4) + (8*2)+(8*3)+(8*4) = 234

我的代码

        int[] firstArray = { 5, 6, 7, 8 };
        int[] secondArray = { 2, 3, 4 };
        int[] thirdArray = new int[firstArray.Length * secondArray.Length];
        for (int i = 0; i < firstArray.Length; i++)
            for (int j = 0; j < secondArray.Length; j++)
            {
                thirdArray[i * firstArray.Length + j] = firstArray[i] * secondArray[j];
                Console.WriteLine(thirdArray[i * firstArray.Length + j]);
            }

2 个答案:

答案 0 :(得分:1)

您不需要第三个数组,只需将结果求和

var total = 0;
for (int i = 0; i < firstArray.Length; i++)
   for (int j = 0; j < secondArray.Length; j++)
   {
      total += (firstArray[i] * secondArray[j]);
   }
Console.WriteLine(total);

但是,您忘记在第三个数组索引中减去一个长度形式。

即获取您需要的索引i * (firstArray.Length - 1) + j

int[] thirdArray = new int[firstArray.Length * secondArray.Length];
for (int i = 0; i < firstArray.Length; i++)
   for (int j = 0; j < secondArray.Length; j++)
   {
      thirdArray[i * (firstArray.Length - 1) + j] = firstArray[i] * secondArray[j];
   }
Console.WriteLine(thirdArray.Sum());

答案 1 :(得分:1)

可以应用一些基本代数来简化此:

var total = 0;
var array1Total = 0;
var array2Total = 0;
for (int i = 0; i < firstArray.Length; i++)
{
    array1Total += firstArray[i];
}

for (int j = 0; j < secondArray.Length; j++)
{
    array2Total += secondArray[j];
}
total = array1Total * array2Total;
Console.WriteLine(total);

原因是,如果展开(x0 + x1 + x2 + x3 ...)*(y0 + y1 + y2 + ...),则可以看到将x0乘以每个y,然后相乘x1,每个y,依此类推。因此,您将获得第一个方括号中的每个元素乘以第二个方括号中的每个元素。

虽然这可能看起来并不太大的不同将是相当更好的为大阵列。如果你的数组的长度是m和n然后由嵌套的循环方法,你将有m * n个循环迭代。通过上述技术,您将获得m + n。对于较小的值,这没什么大不了的。如果您有成千上万个项目的数组,那么上述操作会更快。

当然,还有一种更简单的方法可以完成上述操作:

var total = firstArray.Sum()*secondArray.Sum();