Не могу получить минимальное число в массиве по своему алгоритму
Чтобы получить минимальное число я прилумал следующий алгоритм:
- Получаем от пользователя массив чисел и его длинну
- Проверяем если длинна равна 1 возвращаем 1 елемент, если длинна <= 0, то возвращаем 0
- Если две проверки не сработали, то идем в else
- Там объявляем две переменние: число checkNum и check (тоже int, потом поясню)
- Далее перебираем числа массиве в цикле for
- Задаем checkNum значение массива по индексу i (for (int i = 0; i < len; i++))
- check = 0
- Опять перебираем массив
- Сравниваем елементи этого массива с checkNum
- Если елемент меньше и не равен checkNum, то до check добавляем 1
- Когда все елементи в for перебрались, то сравниваем check с длинной массива - 1
- Если они равни, то возвращаем checkNum, если нет то передаем checkNum следующее значение и делаем все опять
У меня этот алгоритм не работает. Также мне не нужни сторонние библиотеки, функции..
#include <iostream>
using namespace std;
int getMin(int nums[], int len) {
if (len == 1) { return nums[0]; }
else if (len <= 0) { return 0; }
else {
signed int checkNum;
int check = 0;
for (int i = 0; i < len; i++) {
checkNum = nums[i];
check = 0;
for (int j = 0; j < len; j++) {
if (checkNum != nums[j] && checkNum < nums[j]) { check++; }
}
if (check == len-1) { return checkNum; break; }
}
}
}
int main() {
int nums[] = {2, 1, 3, 4, 5, 6, 0};
cout << "Min: " << getMin(nums, 7) << endl;
}
Ответы (2 шт):
"Зачем просто, если можно сложно"...
Не хотите вот так?
int getMin(int nums[], int len)
{
if (len <= 0) throw runtime_error("Wrong array");
int min = nums[0];
for (int i = 1; i < len; i++)
if (min > nums[i]) min = nums[i];
return min;
}
Алгоритм: запоминаем как минимальный первый элемент массива. Затем для каждого оставшегося элемента массива сравниваем его с текущим минимальным. Если он меньше - запоминаем новый минимальный элемент.
По окончании массива возвращаем найденный минимум...
Возвращать при неверной длине массива 0 - решение очень нехорошее - как вы его отличите от 0 в верном массиве?
Если пишем на C++, то лучше для каждой задачи использовать подходящий C++ класс_ контейнер. Например, вы могли бы использовать std::valarray, который помимо других возможностей, знает свой минимальный элемент:
std::valarray<int> nums{ 34, 56, 104, 25,24, 465 };
cout << nums.min();