Owen Hodgson
Owen Hodgson

Reputation: 37

Trouble with multiplying array elements

Basically i'm trying to multiply each element of the first array with each element of the second array and then store it all at the end as a total. I'm pretty new to coding so just trying to learn and this one really has me stuck. This is the example of what it should eventually do.

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

My code

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

Upvotes: 0

Views: 47

Answers (2)

Chris
Chris

Reputation: 27627

You can apply some basic algebra to simplify this:

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

The reason is that if you expand (x0+x1+x2+x3...)*(y0+y1+y2+...) then you can see that you will multiply x0 by each of the y, then multiply x1 by each of the y, and so on. So you'll get each of the elements in the first brackets multiplied by each of the elements in the second brackets.

While this may not seem much different it will be considerably better for large arrays. if the length of your arrays are m and n then by the nested loops method you'll have m*n loop iterations. With the above technique you will have m+n. For small values this isn't a big deal. If you have arrays of thousands of items then the above will be significantly faster.

Of course, there is an even easier way to do the above:

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

Upvotes: 1

TheGeneral
TheGeneral

Reputation: 81583

You dont need a third array, you can just sum the results

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

However you forgot to minus one form the length, in the third array index.

i.e to get the index you need 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());

Upvotes: 1

Related Questions