C++ прошу помогите объясните задачку с курса не пойму как с индексами в векторе работать( - Вопросы по С+

Вопрос C++ прошу помогите объясните задачку с курса не пойму как с индексами в векторе работать(

Регистрация
17 Дек 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
Наименьший положительный

Выведите значение наименьшего из всех положительных элементов в массиве. Известно, что в массиве есть хотя бы один положительный элемент.



Входные данные



В первой строке содержится натуральное число n

(n⩽100

) — количество элементов в массиве. В следующей строке содержатся n

чисел — элементы массива. Гарантируется, что значения всех элементов — целые числа, не превосходящие 100

по абсолютному значению.



Выходные данные



Выведите ответ к задаче.
 
Регистрация
23 Окт 2013
Сообщения
91
Репутация
0
Спасибо
0
Монет
0
#include <algorithm>
#include <iostream>
#include <limits>
#include <vector>
using namespace std;
int main() {
size_t n;
cin >> n;
vector<int> vec(n);
for (auto& x : vec) cin >> x;
auto cmp = [](int a, int b) {
if (a < 0) a = numeric_limits<int>::max();
if (b < 0) b = numeric_limits<int>::max();
return a < b;
};
auto pos = min_element(vec.begin(), vec.end(), cmp);
cout << *pos << '\n';
}


если правда что не более 100 по модулю то для хранения подойдет char. А если подумать string - тот же самый вектор)
int n;
cin >> n;
vector<int> v(n);
for (auto &t : v) { cin >> t; }

int min = 0;
for (auto t : v) {
if (t > 0 && (t < min || min == 0)) { min = t; }
}
cout << min;
Но только зачем здесь вектор?

int n, min = 0, t;
cin >> n;
while (n-- > 0) {
cin >> t;
if (t > 0 && (t < min || min == 0)) { min = t; }
}
cout << min;
 
Регистрация
22 Ноя 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
Эти вопросы лучше задавать чату GPT, вот что он решил:
Задача заключается в поиске минимального положительного числа в векторе (или массиве). Давайте разберем решение на C++ с использованием вектора, объясняя работу с индексами. #include <iostream>

#include <vector>

#include <limits> // для numeric_limits



using namespace std;



int main() {

int n;

cin >> n;



vector<int> a(n); // Создаем вектор a размера n

for (int i = 0; i < n; ++i) {

cin >> a;

}



int min_positive = numeric_limits<int>::max(); // Инициализируем минимальное положительное значение максимально возможным числом



for (int i = 0; i < n; ++i) { // Проходим по всем элементам вектора

if (a > 0 && a < min_positive) { // Проверяем, является ли элемент положительным и меньше текущего минимума

min_positive = a; // Если да, обновляем минимум

}

}



cout << min_positive << endl;

return 0;

} Объяснение работы с индексами:

• vector<int> a(n); создает вектор a типа int размером n. Векторы в C++ - это динамические массивы. Они автоматически управляют памятью.
• for (int i = 0; i < n; ++i): Это цикл for, который перебирает все элементы вектора. Переменная i — это индекс элемента. Индексы в векторах (и массивах) начинаются с 0. Таким образом, a[0] — первый элемент, a[1] — второй, и так далее, до a[n-1] — последний элемент.
• a обращается к элементу вектора с индексом i. Это позволяет получить значение элемента и изменить его.

Объяснение логики поиска минимального положительного числа:

1. Инициализация min_positive: Мы инициализируем min_positive максимально возможным значением целого числа (numeric_limits<int>::max()). Это гарантирует, что первое найденное положительное число будет меньше min_positive.

2. Проход по вектору: Цикл for перебирает каждый элемент вектора.

3. Проверка на положительность и минимум: Внутри цикла проверяется, является ли текущий элемент a положительным (a > 0) и меньше текущего минимального положительного числа (a < min_positive).

4. Обновление минимума: Если условие выполняется, min_positive обновляется значением текущего элемента.

5. Вывод результата: После обработки всех элементов вектора, min_positive содержит значение наименьшего положительного числа, которое выводится на консоль.


Этот код эффективно решает задачу. Обратите внимание на использование numeric_limits<int>::max(), что делает код более надежным и универсальным, не требуя предварительного заполнения min_positive каким-либо произвольным значением.
 
Регистрация
15 Окт 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
В задаче нет ни векторов, ни индексов. int n, v, mn = 10000;
cin >> n;
while (n-- > 0) {
cin >> v;
if (v > 0 && v < mn) { mn = v; }
}
cout << mn;
 
Регистрация
14 Ноя 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
#include <iomanip>
#include <iostream>
#include <random>

using namespace std;

void random_fill(int* a, const size_t n, const int k) {
uniform_int_distribution<> uid(-k, k);
mt19937 gen{ random_device()() };
auto flag = true;
while (flag) {
for (size_t i = 0; i < n; ++i) {
a = uid(gen);
if (flag && 0 < a) flag = !flag;
}
}
}

size_t get_index_min_element(int* a, const size_t n, const int k) {
auto pos = n;
auto value = k + 1;
for (size_t i = 0; i < n; ++i) {
if (0 < a && a < value) {
value = a;
pos = i;
}
}
return pos;
}

int main() {
constexpr size_t m = 100;
constexpr auto k = 100;
int a[m]{};
cout << ">>> ";
size_t n;
cin >> n;
random_fill(a, n, k);
for (size_t i = 0; i < n; ++i) cout << setw(5) << a;
cout.put('\n');
const auto index = get_index_min_element(a, n, k);
cout << "<<< " << a[index] << '\n';
}
 

Похожие темы

Сверху Снизу