#include <algorithm>
#include <iostream>
#include <limits>
#include <vector>
using namespace std;
int main() {
size_t n;
cin >> n;
vector<int> vec;
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;
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;
Эти вопросы лучше задавать чату GPT, вот что он решил:
Задача заключается в поиске минимального положительного числа в векторе (или массиве). Давайте разберем решение на C++ с использованием вектора, объясняя работу с индексами. #include <iostream>
#include <vector>
#include <limits> // для numeric_limits
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a; // Создаем вектор 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; создает вектор 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).
5. Вывод результата: После обработки всех элементов вектора, min_positive содержит значение наименьшего положительного числа, которое выводится на консоль.
Этот код эффективно решает задачу. Обратите внимание на использование numeric_limits<int>::max(), что делает код более надежным и универсальным, не требуя предварительного заполнения min_positive каким-либо произвольным значением.
В задаче нет ни векторов, ни индексов. int n, v, mn = 10000;
cin >> n;
while (n-- > 0) {
cin >> v;
if (v > 0 && v < mn) { mn = v; }
}
cout << mn;
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';
}