Форум программистов, компьютерный форум CyberForum.ru

Минимальный элемент массива - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
24.11.2011, 22:36     Минимальный элемент массива #1
Доброго времени суток!
Как найти номер элемента массива, содержащий самое маленькое значение...
тобишь у меня есть массив с определённым количеством элементов..и в нём есть цифры..
мне нужно узнать в каком элементе массива содержится самая маленькая цифра..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 22:36     Минимальный элемент массива
Посмотрите здесь:

C++ Поменять местами минимальный и максимальный элемент массива V[25] и подсчитать количество парных элементов массива
C++ В одномерном массиве, состоящем из n элементов массива, вычислить минимальный элемент массива
C++ Определить, что больше: максимальный элемент массива А[10] или минимальный элемент массива В[7]
Массивы. Вычислить минимальный элемент массива, сумму элементов массива, преобразовать массив C++
C++ Минимальный элемент одномерного массива A заменить на третий отрицательный элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
24.11.2011, 22:38     Минимальный элемент массива #2
bupal, есть у тебя три палочки разной длины. Первая палочка имеет номер 1, вторая палочка имеет номер два, третия палочка имеет номер 2.

Как узнать номер самой короткой палочки?
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
24.11.2011, 22:38     Минимальный элемент массива #3
C++
1
2
3
4
5
6
7
8
9
#include <algorithm>
int idx_min = std::min_element (arr, arr + size) - arr;
// or
int min = arr[0], idx_min = 0;
for (int i = 0; i < size; ++i)
    if (min < arr[i]) {
        min = arr[i];
        idx_min = i;
    }
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.11.2011, 22:38     Минимальный элемент массива #4
bupal,
C++
1
std::min_element(vec.begin(), vec.end()) - vec.begin();
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 22:41     Минимальный элемент массива #5
bupal, как то вы непонятно с числами и цифрами изъясняетесь. Так можно понять еще вот как: найти индекс такого элемента массива, который содержит минимальную цифру. А каждый элемент массива - число, состоящее из цифр.
А можно понять и просто как индекс минимального элемента. Почувствуйте разницу.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
24.11.2011, 22:45  [ТС]     Минимальный элемент массива #6
Цитата Сообщение от ForEveR Посмотреть сообщение
bupal,
C++
1
std::min_element(vec.begin(), vec.end()) - vec.begin();
vec имеется в виду название массива?...
тоесть если у меня есть массив int a[];
то запись будет выглядеть как:
C++
1
min_element(a.begin(), a.end()) - a.begin();
так?...
Сыроежка
Заблокирован
24.11.2011, 22:51     Минимальный элемент массива #7
bupal,

Я думаю, вам еще рано иметь дело со стандартными алгоритмами.
Поэтому я вам покажу упрощенную версию поиска минимального элемента в целочисленном массиве

C++
1
2
3
4
5
6
7
8
9
10
11
 unsigned int min_element( int a[], unsigned int n )
{
   unsigned int min = 0;
 
   for ( unsigned int i = 1; i < n; i++ )
   {
      if ( a[i] < a[min] ) min = i;
   }
 
   return ( min );
}
Если есть массив, например, int a[N], где N - неокторая константа, то воспользоваться функцией можно следующим образом

C++
1
2
3
4
unsigned int min = min_element( a, N );
 
if ( min != N ) std::cout << "minimum = " << a[min] << std::endl;
else std::cout << "minimum has not been found\n";
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 22:53     Минимальный элемент массива #8
Цитата Сообщение от bupal Посмотреть сообщение
мне нужно узнать в каком элементе массива содержится самая маленькая цифра..

Не по теме:

ладно, раз никого не смущает такая формулировка, то ладно...

bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
24.11.2011, 22:56  [ТС]     Минимальный элемент массива #9
Цитата Сообщение от Thinker Посмотреть сообщение

Не по теме:

ладно, раз никого не смущает такая формулировка, то ладно...

я лично не очень понимаю, что не так в этой формулировке?...
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 22:57     Минимальный элемент массива #10
Цитата Сообщение от bupal Посмотреть сообщение
я лично не очень понимаю, что не так в этой формулировке?...

Не по теме:

пост #5

Bers
Заблокирован
24.11.2011, 22:58     Минимальный элемент массива #11
bupal,


11 22 33 40 массив чисел

Самая маленькая цыфра содержится в элементе под номером 3
Самое маленькое число содержится в элементе под номером 0.

Так доходит?

Разницу между "цыферкой" и "числом" осознаете?
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 01:32  [ТС]     Минимальный элемент массива #12
Цитата Сообщение от Сыроежка Посмотреть сообщение
bupal,

Я думаю, вам еще рано иметь дело со стандартными алгоритмами.
Поэтому я вам покажу упрощенную версию поиска минимального элемента в целочисленном массиве

C++
1
2
3
4
5
6
7
8
9
10
11
 unsigned int min_element( int a[], unsigned int n )
{
   unsigned int min = 0;
 
   for ( unsigned int i = 1; i < n; i++ )
   {
      if ( a[i] < a[min] ) min = i;
   }
 
   return ( min );
}
Если есть массив, например, int a[N], где N - неокторая константа, то воспользоваться функцией можно следующим образом

C++
1
2
3
4
unsigned int min = min_element( a, N );
 
if ( min != N ) std::cout << "minimum = " << a[min] << std::endl;
else std::cout << "minimum has not been found\n";
Скажите, а есть способ переделать этот алгоритм так, чтобы он мог давать следующее значение, если минимум только что был использован..
к примеру я сохраняю номер минимума, который только что получил...
и потом проверяю, если минимум, который даёт функция равен сохранённому минимуму, то вернуть миним, который идёт после этого...
Сыроежка
Заблокирован
25.11.2011, 01:38     Минимальный элемент массива #13
bupal,
Извините. но я не увидел, что мой ответ для вас интересен.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 01:40  [ТС]     Минимальный элемент массива #14
Цитата Сообщение от Сыроежка Посмотреть сообщение
bupal,
Извините. но я не увидел, что мой ответ для вас интересен.
Извеняюсь..исправился..))
большое спасибо..
QVO
 Аватар для QVO
636 / 447 / 32
Регистрация: 26.10.2010
Сообщений: 1,261
Записей в блоге: 4
Завершенные тесты: 2
25.11.2011, 01:43     Минимальный элемент массива #15
bupal,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <limits.h>
 
// С начало переменная мин содержит максимум.
int min = INT_MAX;
// Задали размер массива
int size = 10;
// Создали динамически массив
int array = new int[size ];
 
// Запускаем цикл
for(int i = 0; i <  size; i++)
{
// Если данные в ячейки меньше минимума, то присваеваем
// минимуму значение ячейки
if(array[i] < min) min = array[i] ;
}
еще как вариант:
C++
1
2
3
4
5
// Запускаем цикл
for(int i = 0; i <  size; i++)
{
min = std:min(array[i], min);
}
Сыроежка
Заблокирован
25.11.2011, 01:58     Минимальный элемент массива #16
Цитата Сообщение от bupal Посмотреть сообщение
Извеняюсь..исправился..))
большое спасибо..
Делается все очень просто. Допустим, вы нашли первый индекс минимума - min. Если он не равен N, значит в массиве еще остались элементы, которые не были просмотрены. Значит надо для следующего вызова функции передать адрес массива, начиная со следующего элемента после найденного. И естественно второй аргумент, задающий длину массива, следует уменьшить на этот индекс. Итак, пусть при первом вызове мы имеем

C++
1
unsigned int min = min_element( a, N );
и при этом минимум был найден, то есть min != N. Тогда для следующего вызова функции вы пишите

C++
1
2
min++;
min = min_element( a + min, N - min );
То есть мы установили начало массива на адрес следующего элемента после найденного минимума и, соответственно, уменьшили на это же число размер последовательности, которая будет просматриваться в функции.

И так будете делать, пока функция вам не скажет, что больше нет минимумов, то есть когда она min получит из функции значение, равное N-min. Обратите внимание, не N, как было в первом случае, а именно N - min, так как мы сокращаем размер просматриваемой последовательности.
Эти значения вы можете хранить в отдельной переменной.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 02:17  [ТС]     Минимальный элемент массива #17
Цитата Сообщение от Сыроежка Посмотреть сообщение
Делается все очень просто. Допустим, вы нашли первый индекс минимума - min. Если он не равен N, значит в массиве еще остались элементы, которые не были просмотрены. Значит надо для следующего вызова функции передать адрес массива, начиная со следующего элемента после найденного. И естественно второй аргумент, задающий длину массива, следует уменьшить на этот индекс. Итак, пусть при первом вызове мы имеем

C++
1
unsigned int min = min_element( a, N );
и при этом минимум был найден, то есть min != N. Тогда для следующего вызова функции вы пишите

C++
1
2
min++;
min = min_element( a + min, N - min );
То есть мы установили начало массива на адрес следующего элемента после найденного минимума и, соответственно, уменьшили на это же число размер последовательности, которая будет просматриваться в функции.

И так будете делать, пока функция вам не скажет, что больше нет минимумов, то есть когда она min получит из функции значение, равное N-min. Обратите внимание, не N, как было в первом случае, а именно N - min, так как мы сокращаем размер просматриваемой последовательности.
Эти значения вы можете хранить в отдельной переменной.
а для чего инкриментировать min ??? (min++)
Сыроежка
Заблокирован
25.11.2011, 02:21     Минимальный элемент массива #18
Цитата Сообщение от bupal Посмотреть сообщение
а для чего инкриментировать min ??? (min++)
Потому что надо следующий поиск начинать с элемента, следующего за найденным минимумом. Иначе, если начинать поиск с этого же индекса, то функция всегда будет его возвращать, так как она находит первый минимум в последовательности.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 02:24  [ТС]     Минимальный элемент массива #19
Цитата Сообщение от Сыроежка Посмотреть сообщение
Потому что надо следующий поиск начинать с элемента, следующего за найденным минимумом. Иначе, если начинать поиск с этого же индекса, то функция всегда будет его возвращать, так как она находит первый минимум в последовательности.
не знаю почему, но у меня возвращает вместо второго минимума - максимум...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2011, 02:26     Минимальный элемент массива
Еще ссылки по теме:

Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива C++
Поменять местами минимальный элемент и первый отрицательный элемент массива целых чисел C++
Поменять местами минимальный элемент с первым элементом массива, а максимальный элемент с последним C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
25.11.2011, 02:26     Минимальный элемент массива #20
Цитата Сообщение от bupal Посмотреть сообщение
не знаю почему, но у меня возвращает вместо второго минимума - максимум...
Показывайте код, что вы там написали.
Yandex
Объявления
25.11.2011, 02:26     Минимальный элемент массива
Ответ Создать тему
Опции темы

Текущее время: 04:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru