TransWikia.com

Не могу получить минимальное число в массиве по своему алгоритму

Stack Overflow на русском Asked by ArthurCoder on December 14, 2021

Чтобы получить минимальное число я прилумал следующий алгоритм:

  1. Получаем от пользователя массив чисел и его длинну
  2. Проверяем если длинна равна 1 возвращаем 1 елемент, если длинна <= 0, то возвращаем 0
  3. Если две проверки не сработали, то идем в else
  4. Там объявляем две переменние: число checkNum и check (тоже int, потом поясню)
  5. Далее перебираем числа массиве в цикле for
  6. Задаем checkNum значение массива по индексу i (for (int i = 0; i < len; i++))
  7. check = 0
  8. Опять перебираем массив
  9. Сравниваем елементи этого массива с checkNum
  10. Если елемент меньше и не равен checkNum, то до check добавляем 1
  11. Когда все елементи в for перебрались, то сравниваем check с длинной массива – 1
  12. Если они равни, то возвращаем 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 Answers

Если пишем на C++, то лучше для каждой задачи использовать подходящий C++ класс_ контейнер. Например, вы могли бы использовать std::valarray, который помимо других возможностей, знает свой минимальный элемент:

std::valarray<int> nums{ 34, 56, 104, 25,24, 465 };
cout << nums.min();

Answered by AR Hovsepyan on December 14, 2021

"Зачем просто, если можно сложно"...

Не хотите вот так?

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 в верном массиве?

Answered by Harry on December 14, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP