数组元素相乘问题

基本上,我试图将第一个数组的每个元素与第二个数组的每个元素相乘,然后将其全部存储在最后作为总计。我对编码很陌生,所以只是想学习,这个真的让我卡住了。这是它最终应该做什么的例子。


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]);

            }


梵蒂冈之花
浏览 71回答 2
2回答

一只甜甜圈

您不需要第三个数组,只需对结果求和即可var total = 0;for (int i = 0; i < firstArray.Length; i++)&nbsp; &nbsp;for (int j = 0; j < secondArray.Length; j++)&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; total += (firstArray[i] * secondArray[j]);&nbsp; &nbsp;}Console.WriteLine(total);但是,您忘记在第三个数组索引中减去一种形式的长度。即获取您需要的索引i * (firstArray.Length - 1) + jint[] thirdArray = new int[firstArray.Length * secondArray.Length];for (int i = 0; i < firstArray.Length; i++)&nbsp; &nbsp;for (int j = 0; j < secondArray.Length; j++)&nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; thirdArray[i * (firstArray.Length - 1) + j] = firstArray[i] * secondArray[j];&nbsp; &nbsp;}Console.WriteLine(thirdArray.Sum());

蛊毒传说

你可以应用一些基本的代数来简化这一点:var total = 0;var array1Total = 0;var array2Total = 0;for (int i = 0; i < firstArray.Length; i++){&nbsp; &nbsp; array1Total += firstArray[i];}for (int j = 0; j < secondArray.Length; j++){&nbsp; &nbsp; 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();
打开App,查看更多内容
随时随地看视频慕课网APP