Вопрос задан 30.11.2023 в 22:16. Предмет Информатика. Спрашивает Кобрин Віталік.

Проблема с кодом c++. Задача: Дан массив из N целых чисел. Требуется найти минимум в этом массиве

и поменять его с первым элементом. Ввод: сначала N - количество элементов в массиве, а потом элементы массива.Проблема: На двух тестах правильные ответы и мои ответы доступны только для скачивания и я не понимаю, почему так, что нужно изменить.Тест 1: 3-70 -37 72 Тест 2:9-721901275 851127613 -336844043 253069616 238021678 143004029 588495093 -605634013 64587483 Мой код:#include using namespace std;int main(){ int n; cin >> n; long long arr[100], imin; for (long long i = 0; i < n; i++){ cin >> arr[i]; } long long min = arr[0]; for (long long i = 0; i < n; i ++){ if (arr[i] < min) { min = arr[i]; imin = i; } } swap(arr[0], arr[imin]);// cout << imin; for (long long i = 0; i < n; i++){ cout << arr[i] << " "; } return 0;}
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Gorbul Vasya.

Ответ:

#include

using namespace std;

int main(){

long long n;

cin >> n;

long long arr[100], imin = 0;

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

cin >> arr[i];

}

long long min = arr[0];

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

if (arr[i] < min) {

min = arr[i];

imin = i;

}

}

long long buf = arr[0];

arr[0] = arr[imin];

arr[imin] = buf;

// cout << imin;

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

cout << arr[i] << " ";

}

return 0;

}

Объяснение:

возможно потому что переменная n была типа int.

Если не так, прошу прощения, удалите ответ

0 0
Отвечает Колодьянова Анна.

1) Какие ограничения по N и всем элементам массива? Может вообще придется прописывать длинную арифметику или придумывать решение без использования массивов...

2) Почему arr[100] ? Элементов точно не больше ста? Если не знаешь N заранее, то лучше использовать std::vector

3) переменная imin инициализируется, но не декларируется, что может стать причиной проблем в случае, если минимальный элемент первый.

4) Лучше не называть переменную min или max потому что это встроенные функции языка и может быть неоднозначный вызов

#include <iostream>

#include <vector>

using namespace std;

typedef long long ll;

void solve(){

   int n;

   cin >> n;

   vector<ll> a(n);

   for(auto &i: a) cin >> i;

   pair<ll, int> minValue = {a.front(), 0};

   for(int i = 1; i < n; i++)

       if(a[i] < minValue.first)

           minValue = {a[i], i};

   swap(a.front(), a[minValue.second]);

   for(auto &i: a) cout << i << " ";

}

int main(){

   solve();

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

В вашем коде есть несколько проблем:

1. В строке `long long arr[100], imin;` вы объявляете массив `arr` размером 100, но в задаче не указано, что размер массива может быть не больше 100. Лучше объявить массив с размером, равным введенному значению `n`: `long long arr[n], imin;`.

2. В строке `long long min = arr[0];` вы объявляете переменную `min` и инициализируете ее значением первого элемента массива. Однако, вам необходимо найти минимальный элемент массива, а не присвоить значение первого элемента. Лучше инициализировать `min` значением `arr[0]`, а затем сравнивать его со всеми элементами массива.

3. В строке `imin += i;` вы пытаетесь найти индекс минимального элемента массива, но используете оператор `+=`, который складывает значение `i` с текущим значением `imin`. Вам необходимо просто присвоить `i` переменной `imin`: `imin = i;`.

4. В строке `swap(arr[0], arr[imin]);` вы меняете местами первый элемент массива с минимальным элементом, но перед этим должны найти индекс минимального элемента. Переменная `imin` должна быть инициализирована значением 0 перед циклом, чтобы в случае, если первый элемент является минимальным, индекс был установлен правильно.

Вот исправленный код:

```cpp #include using namespace std;

int main() { int n; cin >> n; long long arr[n], imin = 0; for (int i = 0; i < n; i++) { cin >> arr[i]; } long long min = arr[0]; for (int i = 0; i < n; i++) { if (arr[i] < min) { min = arr[i]; imin = i; } } swap(arr[0], arr[imin]); for (int i = 0; i < n; i++) { cout << arr[i] << " "; } return 0; } ```

Теперь ваш код должен правильно находить минимальный элемент и менять его местами с первым элементом массива.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос