Как вывести номера всех минимальных нечётных элементов массива?
Пусть дано:Вывести номера всех минимальных нечетных элементов. Нумерация начинается с нуля. Если таких элементов нет, то вывести сообщение об этом.n =8 Массив =0, 5, 9, 1, 2, 7, 1, 3 Результат = 3 6 n =8 Массив= 2, 6, 10, 6, 8, 8, 8, 2 Результат = нечетных элементов нет Вот мой вариант:
//вывести номера всех минимальных нечётных элементов массива
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
int n;
cout << "Введите размерность массива - ";
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cout << "a[" << i << "]= ";
cin >> a[i];
}
int min = a[0];
for (int i = 0; i < n; i++)
{
if (a[i] % 2 != 0)
{
if (a[i] < min) min = a[i];
}
else if (a[i] == min)
cout << "Номера всех минимальных нечётных элементов равна " << n;
cout << endl;
}
if (min % 2 == 0)
cout << "не чётных элементов нет/n" << endl;
cout << min << endl;
delete []a;
return 0;
}
Что тут не верно?Помогите исправить пожалуйста.Не серчайте,я только учусь работать с массивами...Задача всё ещё не решена.
Ответы (2 шт):
ошибка у вас в том, что вы определяете минимальный элемент и выводите на экран минимальный элемент ОДНОВРЕМЕННО, что неверное
вам сначала надо
найти минимальный нечётный элемент с помощью одного цикла
вывести минимальные нечётные элементы с помощью второго цикла
т.е.
int min = a[0];
for (int i = 0; i < n; i++)
{
min = ((a[i] % 2 != 0) && (a[i] < min)) ? a[i] : min;
}
if (min % 2 == 0)
cout << "не чётных элементов нет/n" << endl;
else
for (int i = 0; i < n; i ++)
{
if (a[i] == min)
std::cout << i << std::endl;
}
В общем я решил все проблемы с вашей помощью и своим умом предоставляю к ознакомлению полный код для решения данной задачи.
//вывести номера всех минимальных нечётных элементов массива
#include <iostream>
#include <climits>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
int n;
cout << "Введите размерность массива - ";
cin >> n;
int* a = new int[n];
cout << "Введите " << n << " целых чисел:\n";
int min_odd = INT_MAX;
for (int i = 0; i < n; i++)
{
cin >> a[i];
if (a[i] % 2 && (min_odd == INT_MAX || a[i] < min_odd)) min_odd = a[i];
}
if (min_odd != INT_MAX)
{
for (int i = 0; i < n; i++)
{
if (a[i] == min_odd)
std::cout << i << std::endl;
}
}
else cout <<"нечётных элементов нет/n"<<endl ;
return 0;
}
Работает и выводит верный результат:)