Проблема с кодом 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;
}
Ответы
Ответ:
#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.
Если не так, прошу прощения, удалите ответ
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();
}