.NET 4.x Найти сумму элементов двумерного массива которые находятся между минимумом и максимумом - C#
Формулировка задачи:
Добрый день, прошу помочь в решении задачи, начал изучать С#, застрял на двумерных массивах. Задача стоит следующая:
Дан двумерный массив размерностью 5х5, заполненный случайными числами из диапазона от -100 до 100. Определить сумму элементов массива, расположенных между минимальным и максимальным элементами.
До момента поиска минимума и максимума а также нахождения позиций, я ее решил, но не могу в последнем цикле правильно поставить условия, чтобы посчитать правильно сумму.
Вот код:
Я здесь задал массив вручную для удобства отладки, но пока что решить до конца не получилось. Спасибо за помощь.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Random rand = new Random();
// int[,] MyArray = new int[5, 5];
int[,] MyArray = { { -50, 3, 5 }, { -80, 10, 15 }, { 4, 55, 78 } };
Console.WriteLine("This is our start array: ");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
// MyArray[i, j] = rand.Next(-100, 101);
Console.Write(MyArray[i, j] + "\t");
}
Console.WriteLine();
}
IEnumerable<int> ConvertedArray = MyArray.Cast<int>();
int MinValue = ConvertedArray.Min();
int MaxValue = ConvertedArray.Max();
Console.WriteLine("Minimal value of array it: " + MinValue);
Console.WriteLine("Maximal value of array it: " + MaxValue);
int IndexRMin = 0, IndexCMin = 0, IndexRMax = 0, IndexCMax = 0, Sum = 0;
//ищем индексы максимума и минимума
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (MyArray[i, j] == MinValue)
{
IndexRMin = i;
IndexCMin = j;
}
if (MyArray[i, j] == MaxValue)
{
IndexRMax = i;
IndexCMax = j;
}
}
}
Console.WriteLine("Position of Min Value it: " + IndexRMin + IndexCMin);
Console.WriteLine("Position of Max Value it: " + IndexRMax + IndexCMax);
//вот здесь беда, не могу правильно поставить условия цикла, сумма считается неправильно
for (int i = IndexRMin; i < IndexRMax; i++)
{
for (int j = IndexCMin; j < IndexCMax; j++)
{
if (MyArray[i, j] == MyArray[IndexRMin, IndexCMin])
{
j++;
}
Sum += MyArray[i, j];
}
}
Console.WriteLine("Summa = : " + Sum);
}
}
}Решение задачи: «.NET 4.x Найти сумму элементов двумерного массива которые находятся между минимумом и максимумом»
textual
Листинг программы
bool НашлиМинимум = false;
bool НашлиМаксимум = false;
bool ЧтотоНашли = false;
if (MinValue == MaxValue)
Sum = 0;
else
{
for (int i = 0; i < MyArray.GetLength(0); i++)
{
for (int j = 0; j < MyArray.GetLength(1); j++)
{
if (MyArray[i, j] == MinValue)
{
if (ЧтотоНашли == false)
{
IndexIMin = i;
IndexJMin = j;
ЧтотоНашли = true;
НашлиМинимум = true;
}
if (ЧтотоНашли == true)
if (НашлиМаксимум == false)
{
IndexIMin = i;
IndexJMin = j;
НашлиМинимум = true;
}
if (НашлиМаксимум == true && НашлиМинимум == false)
{
IndexIMin = i;
IndexJMin = j;
НашлиМинимум = true;
}
}
if (MyArray[i, j] == MaxValue)
{
if (ЧтотоНашли == false)
{
IndexIMax = i;
IndexJMax = j;
ЧтотоНашли = true;
НашлиМаксимум = true;
}
if (ЧтотоНашли == true)
if (НашлиМинимум == false)
{
IndexIMax = i;
IndexJMax = j;
НашлиМаксимум = true;
}
if (НашлиМинимум == true && НашлиМинимум == false)
{
IndexIMax = i;
IndexJMax = j;
НашлиМаксимум = true;
}
}
}
}
S += ("Position of Min Value it: " + IndexIMin + IndexJMin + "\n");
S += ("Position of Max Value it: " + IndexIMax + IndexJMax + "\n");
//вот здесь беда, не могу правильно поставить условия цикла, сумма считается неправильно
bool flagSum = false;
for (int i = 0; i < MyArray.GetLength(0); i++)
for (int j = 0; j < MyArray.GetLength(1); j++)
{
if ((i == IndexIMin && j == IndexJMin) || (i == IndexIMax && j == IndexJMax))
{
flagSum = !flagSum;
continue;
}
if (flagSum)
Sum += MyArray[i, j];
}
}
MessageBox.Show(Sum.ToString() + S); // после else вывод