Правила[Одномерные массивы]43. Дан массив чисел. Найти сумму элементов массива, расположенных между минимальным и максимальным элементами включительно.
0
Комментарии (12)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Вообще то условия задачи не до конца ясны. Если в массиве повторяются min и/или max, то от какого — от самого крайнего слева или самый правый иметь ввиду или тот который больше сумму даст?
Вот по самым первым min и max, понятно что если добавить "=" к >/< будут последние найденные. Возможно еще надо подумать как с макс суммой.
public static int summaMinMax(int... array) {
int[] minmax = new int[2];
for (int i = 1; i < array.length; i++)
minmax = new int[]{array[i] < array[minmax[0]] ? i : minmax[0], array[i] > array[minmax[1]] ? i : minmax[1]};
minmax = new int[]{minmax[0] < minmax[1] ? minmax[0] : minmax[1], minmax[0] < minmax[1] ? minmax[1] : minmax[0]};
int summa = 0;
for (int i = minmax[0]; i <= minmax[1] ; i++)
summa += array[i];
return summa;
}
public static int sumBetweenMinAndMax(int[] array) {
int sum = 0;
int iMin = 0, iMax = 0;
for (int i = 1; i < array.length; i++) {
if (array[iMin] > array[i]) iMin = i;
if (array[iMax] < array[i]) iMax = i;
}
if(iMax > iMin) for (int i = iMin; i <= iMax; i++) sum += array[i];
else for (int i = iMax; i <= iMin; i++) sum +=array[i];
return sum;
}
// for example
public static int getSummBetweenMinAndMax(int[] arr)
{
int mini = 0;
int maxi = 0;
int res = 0;
for (int i = 1 ; i < arr.length ; i++)
{
mini = arr[i] < arr[mini] ? i : mini;
maxi = arr[i] > arr[maxi] ? i : maxi;
}
for (int i = mini > maxi ? maxi : mini; i <= (mini < maxi ? maxi : mini); i++)
res += arr[i];
return res;
}
int[] m = {1, 2, 3, 4, 5, 6, 0, 8, 9};
int minM = m[0];
int maxM = m[0];
int indexMin = 0;
int indexMax = 0;
int sum = 0;
for (int i = 0; i < m.length; i++)
{
if (m[i] < minM)
{
minM = m[i];
indexMin = i;
}
if (m[i] > maxM)
{
maxM = m[i];
indexMax = i;
}
}
for (int i = indexMin; i <= indexMax; i++)
{
sum = sum + m[i];
}
А как же без minM и maxM запомнить max и min элементы, по индексу?
Добавил проверку на индексы, последний цикл теперь выглядит так
<code>
if (indexMin < indexMax)
{
for (int i = indexMin; i <= indexMax; i++)
{
sum = sum + m[i];
}
} else
{
for (int i = indexMin; i >= indexMax; i--)
{
sum = sum + m[i];
}
}</code>
<code>
int[] m = {1, 2, 3, 4, 5, 6, 0, 8, 9};
int indexMin = 0;
int indexMax = 0;
int sum = 0;
int i = 0;
while (i < m.length)
{
if (m[i] < m[indexMin])
indexMin = i;
if (m[i] > m[indexMax])
indexMax = i;
i++;
}
if (indexMin < indexMax)
{
for (int j = indexMin; j <= indexMax; j++)
sum = sum + m[j];
} else
{
for (int j = indexMin; j >= indexMax; j--)
sum = sum + m[j];
}</code>
Вот по самым первым min и max, понятно что если добавить "=" к >/< будут последние найденные. Возможно еще надо подумать как с макс суммой.
они здесь не нужны вообще
в последнем цикле, а что если индекс макс стоит ближе к началу, а индекс мин к концу
Добавил проверку на индексы, последний цикл теперь выглядит так
m[indexMin],m[indexMax]
Вот, что получилось в итоге:
нужно два цикла, один поиск индекса мин-макс,
второй считает от индекса мин до индекса макс