Найти номер наименьшего положительного числа в заданной последовательности. Если в ней отсутствуют положительные числа, ответом должно быть -1

Anwer

Условие: Дано натуральное число n (n < 100) и действительные числа 1a, 2a, ..., na. Найти номер наименьшего положительного числа в заданной последовательности. Если в ней отсутствуют положительные числа, ответом должно быть значение -1. Решение: И так я все сделал, нашел минимум. все работает. но есть одно но а именно
Если в ней отсутствуют положительные числа, ответом должно быть значение -1.
Я ввожу числа к примеру n = 4. Ввожу -4, 9, 8, -2. и программа грубо говоря работает некорректно, т.е. ищем минимум среди отрицательных чисел, а в условии говорится что нужно найти минимум наименьшего положительного. Помогите новичку исправить пожалуйста. Буду очень очень благодарен P.S. дополнительно нашел максимум.
#include<iostream>
#include<math.h>
 
using namespace std;
int main ()
{
    setlocale(0, "rus");
    int n;
    cout << "Введите количество елементов: ";
    cin >> n;
    ****** a [100];
    ****** min = 0, max = 0;
    for (int i = 0; i < n; i++)
    {
        cout << "Введите а["<< i+1 <<"]: ";
        cin >> a[i];
    }
    min = a[0];
    for (int i = 0; i < n; i++)
    {
        if (a[i] < min)
        {
            min = a[i];
        }
    }
    max = a[0];
    for (int i = 0; i < n; i++)
    {
        if (a[i] > max)
        {
            max = a[i];
        }
    }
     while (min, max > 0)
     {
         cout << "Найменьшее положительное числo: " << min << endl;
     break;
     }
     while (max <= 0)
     {
        cout << "Ответ: -1" << endl;
        break;
     }
    system("pause");
    return 0;
}
3 ответа

Anwer

Anwer,
#include<iostream>
#include<math.h>
 
using namespace std;
int main ()
{
    setlocale(0, "rus");
    int n;
    cout << "Введите количество елементов: ";
    cin >> n;
    ****** a [100];
    ****** min = 0, max = 0;
    for (int i = 0; i < n; i++)
    {
        cout << "Введите а["<< i+1 <<"]: ";
        cin >> a[i];
    }
 
    for (int i = 0; i < n; i++)
    {
        if ((a[i] < min || min == 0) && a[i] > 0)
        {
            min = a[i];
        }
    }
    max = a[0];
    for (int i = 0; i < n; i++)
    {
        if (a[i] > max)
        {
            max = a[i];
        }
    }
 
    if (min != 0)
        cout << "Найменьшее положительное числo: " << min << endl;
    else
        cout << "Найменьшее положительное числo:  -1" << endl;
 
     while (max <= 0)
     {
        cout << "Ответ: -1" << endl;
        break;
     }
    system("pause");
    return 0;
}
Изначально инициализируем значением 0 minВ цикле делаем условие
if ((a[i] < min || min == 0) && a[i] > 0)
Если i-ый элемент массива меньше минимального значения или минимальное значение == 0 (изначально) и одновременно i-ый элемент массива положительный - задаем новое значение минимума.А дальше смотрим - если после цикла было задано какое-нибудь значение минимуму - значит минимум найден. Если значение переменной осталось == 0 - значит не было положительных элементов и выводим -1


Anwer

Найти номер наименьшего положительного числа в заданной последовательности. Если в ней отсутствуют положительные числа, ответом должно быть значение -1.
int j = 0;
while((j < n) && (a[j] <= 0)) 
  ++j;
 
cout << "Номер наименьшего положительного числа: ";
if(j < n) {        
  for(int i = j + 1; i < n; i++)        
    if((a[i] > 0) && (a[i] < a[j]))
      j = i;        
  cout << j + 1 << endl;
}
else 
  cout << "-1" << endl;


Anwer

Спасибо большое!