Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

жоски программист Ученик (75), открыт 3 недели назад
Наименьший положительный
Выведите значение наименьшего из всех положительных элементов в массиве. Известно, что в массиве есть хотя бы один положительный элемент.

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

В первой строке содержится натуральное число n
(n⩽100
) — количество элементов в массиве. В следующей строке содержатся n
чисел — элементы массива. Гарантируется, что значения всех элементов — целые числа, не превосходящие 100
по абсолютному значению.

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

Выведите ответ к задаче.
4 ответа
morozov Мастер (1514) 3 недели назад
Эти вопросы лучше задавать чату 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[i];

}



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



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

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

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

}

}



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] обращается к элементу вектора с индексом i. Это позволяет получить значение элемента и изменить его.

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

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

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

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

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

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


Этот код эффективно решает задачу. Обратите внимание на использование numeric_limits<int>::max(), что делает код более надежным и универсальным, не требуя предварительного заполнения min_positive каким-либо произвольным значением.
Rustem Bekyshov Просветленный (43772) 3 недели назад
#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;
жоски программистУченик (75) 3 недели назад
с чата гпт ясно
Николай Веселуха Высший разум (370535) 3 недели назад
 #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[i] = uid(gen);
if (flag && 0 < a[i]) 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[i] && a[i] < value) {
value = a[i];
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[i];
cout.put('\n');
const auto index = get_index_min_element(a, n, k);
cout << "<<< " << a[index] << '\n';
}
Андрей Высший разум (464982) 3 недели назад
В задаче нет ни векторов, ни индексов.
 int n, v, mn = 10000;
cin >> n;
while (n-- > 0) {
cin >> v;
if (v > 0 && v < mn) { mn = v; }
}
cout << mn;
Похожие вопросы