-
Max element in matrix
Hello
I am beginner in programming and I need a little help. In given matrix, I have to find elements that are maximal for its row and column.
For example in matrix
5 7 3 4 8
4 5 9 4 6
3 10 6 7 5
6 4 8 1 9
program should check first row (5 7 3 4 8) and second column (7 5 10 4) and return 10. After that it should continue search and for e.g second row (4 5 9 4 6) and third column (3 9 6 1) return 9. And so on...
I know how to find max for whole matrix, but I need to find (multiple) max(es) for every row and column together.
Here is my code:
Code:
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (a[i, j] > max)
{
max = a[i, j];
}
}
}
listBox1.Items.Add(max);
I think I am close to solution, but I am not quite sure how to do this exactly
If there's any question, I'll try to answer
Thanks in advance
-
So why not just do two for loops (without resetting max in between them)?
-
Assuming it's already late, and this is more extravagant than your teacher would expect, this would work:
Code:
class Program
{
private static void Main(string[] args)
{
int[,] matrix = new int[4, 5]
{
{ 5, 7, 3, 4, 8 },
{ 4, 5, 9, 4, 6 },
{ 3, 10, 6, 7, 5 },
{ 6, 4, 8, 1, 9 }
};
int[,] maxes = new int[4, 5];
for (int row = 0; row <= matrix.GetUpperBound(0); ++row)
{
for (int column = 0; column <= matrix.GetUpperBound(1); ++column)
{
maxes[row, column] = matrix.GetMaxValue(row, column);
}
}
for (int row = 0; row <= matrix.GetUpperBound(0); ++row)
{
for (int column = 0; column <= matrix.GetUpperBound(1); ++column)
Console.Write("{0,2} ", maxes[row, column]);
Console.WriteLine();
}
}
}
public static class Extensions
{
public static int GetMaxValue(this int[,] matrix, int row, int column)
{
int max = int.MinValue;
for (int c = 0; c <= matrix.GetUpperBound(1); ++c)
if (max < matrix[row, c])
max = matrix[row, c];
for (int r = 0; r <= matrix.GetUpperBound(0); ++r)
if (max < matrix[r, column])
max = matrix[r, column];
return max;
}
}
Output:
Code:
8 10 9 8 9
9 10 9 9 9
10 10 10 10 10
9 10 9 9 9
-
Ok well one could have said:
For min, set start value to max. If any value is less than start value, set start value to this value and continue.
For max, set start value to min. If any value is greater than start value, set start value to this value and continue.
-
Thank you everyone :) I finished this :D