Пока неправильно, попробуйте еще раз!
Failed test #2 of 4. Wrong answer
This is a sample test from the problem statement!
Test input:
17
Correct output:
-3 -9 -8 -8 -9
ERROR
Your code output:
-3 -9 -8 -8 -9
ERROR
-3 -9 -8 -8 -9
Свернуть
Time Limit: 5 секунд
Memory Limit: 256 MB
#include "iostream"
#include "cstdlib"
#include "time.h"
#include "iomanip"
#define n 5
using namespace std;
int main(int argc, char* argv[]) {
int mas[n], index_1_otr = n+1, index_last_pol = n+1, k, d;
cin >> d;
srand(d);
//Заполняем массив случайными числами от -n до n
for(int i = 0; i < n; i++)
mas[i] = rand()% 21 - 10;
//Вывод массива на консоль
for(int i = 0; i < n; i++)
cout<<mas[i] << ' ';
cout << endl;
// первый отрицательный и последний положительный элемент массива
for(int i = 0; i < n; i++)
if(mas[i]<0)
{
index_1_otr = i;
break;
}
for(int i = 0; i < n; i++)
if(mas[i]>0)
index_last_pol = i;
//Меняем местами 1й отрицательный и последний положительный
if(index_1_otr == n+1)
cout<< "ERROR" << endl;
else if(index_last_pol == n+1)
cout<< "ERROR" << endl;
else{
k = mas[index_last_pol];
mas[index_last_pol] = mas[index_1_otr];
mas[index_1_otr] = k;
}
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
cout << endl;
return 0;
}
Поменять местами первый отрицательный и последний положительный элементы массива.
С новой строки вывести измененный массив, разделяя элементы пробелами (пробел должен быть и после последнего элемента).
Если в массиве отсутствуют отрицательные или отсутствуют положительные элементы, то нужно вместо итогового массива вывести слово ERROR.
Sample Input 1:
25
Sample Output 1:
10 -1 -6 4 7
10 7 -6 4 -1
Sample Input 2:
17
Sample Output 2:
-3 -9 -8 -8 -9
ERROR
C/C++
Ребзи привет, гляньте код там всё норм, только на аутпуте два раза вводит один и тот же массив. Укажите на ошибку.
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
unsigned d;
cin >> d;
srand(d);
const int n = 5;
int box[n];
const int l = -10;
const int r = 21;
for (int i = 0; i < n; ++i) box[i] = l + rand() % (l - r);
for (int i = 0; i < n; ++i) cout << box[i] << ' ';
puts("");
int ifn = -1;
for (int i = 0; i < n; ++i) {
if (box[i] < 0) {
ifn = i;
break;
}
}
int ilp = n - 1;
while (ilp >= 0 && box[ilp] <= 0) --ilp;
if (ilp >= 0 && ifn >= 0) {
swap(box[ifn], box[ilp]);
for (int i = 0; i < n; ++i) cout << box[i] << ' ';
puts("");
} else {
puts("ERROR");
}
}
#include <cstdlib>
using namespace std;
int main() {
unsigned d;
cin >> d;
srand(d);
const int n = 5;
int box[n];
const int l = -10;
const int r = 21;
for (int i = 0; i < n; ++i) box[i] = l + rand() % (l - r);
for (int i = 0; i < n; ++i) cout << box[i] << ' ';
puts("");
int ifn = -1;
for (int i = 0; i < n; ++i) {
if (box[i] < 0) {
ifn = i;
break;
}
}
int ilp = n - 1;
while (ilp >= 0 && box[ilp] <= 0) --ilp;
if (ilp >= 0 && ifn >= 0) {
swap(box[ifn], box[ilp]);
for (int i = 0; i < n; ++i) cout << box[i] << ' ';
puts("");
} else {
puts("ERROR");
}
}
Удивляюсь Вам, Алексей, у Вас за спиной немалая практика программирования на C++, а ошибки допускаете по рассеянности… Видимо, весна…
Уточню то, что пропущено в условиях задания, но указано в комментариях в коде: «Вводится положительное число N, объявляется массив из N элементов и заполняется случайными значениями из диапазона [–N, N]».
С помощью директивы define Вы задаёте значение n = 5, стало быть массив состоит из 5 элементов. А вводите Вы в переменную d. Вот только что эта величина означает по-вашему? Я не разумею! Видно, что Вы используете значение d как параметр функции srand(), и что Вы ожидаете?
◉ Обычно стартовое число псевдослучайной последовательности задаётся так: srand(time(NULL));
Re: Заполняем массив случайными числами от -n до n
Размер диапазона, из которого выбираются псевдослучайные числа равен 2n + 1.
◉ mas[i] = rand() % (2 * n + 1) - n;
Алгоритмы поиска первого отрицательного и последнего положительного элементов в принципе правильные (хотя и неоптимальные). Ладно.
А вот проверка отсутствия отрицательных или положительных получилась избыточной! Разве Вы разучились объединять условия с помощью логических операций???
◉
if(index_1_otr == n+1 || index_last_pol == n+1)
cout << "ERROR";
else {
k = mas[index_last_pol];
mas[index_last_pol] = mas[index_1_otr];
mas[index_1_otr] = k;
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
}
✓ Вот в чём Ваша главная ошибка: цикл вывода массива должен быть внутри блока else, а у Вас он отдельно, поэтому массив выводится во всех случаях!
Уточню то, что пропущено в условиях задания, но указано в комментариях в коде: «Вводится положительное число N, объявляется массив из N элементов и заполняется случайными значениями из диапазона [–N, N]».
С помощью директивы define Вы задаёте значение n = 5, стало быть массив состоит из 5 элементов. А вводите Вы в переменную d. Вот только что эта величина означает по-вашему? Я не разумею! Видно, что Вы используете значение d как параметр функции srand(), и что Вы ожидаете?
◉ Обычно стартовое число псевдослучайной последовательности задаётся так: srand(time(NULL));
Re: Заполняем массив случайными числами от -n до n
Размер диапазона, из которого выбираются псевдослучайные числа равен 2n + 1.
◉ mas[i] = rand() % (2 * n + 1) - n;
Алгоритмы поиска первого отрицательного и последнего положительного элементов в принципе правильные (хотя и неоптимальные). Ладно.
А вот проверка отсутствия отрицательных или положительных получилась избыточной! Разве Вы разучились объединять условия с помощью логических операций???
◉
if(index_1_otr == n+1 || index_last_pol == n+1)
cout << "ERROR";
else {
k = mas[index_last_pol];
mas[index_last_pol] = mas[index_1_otr];
mas[index_1_otr] = k;
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
}
✓ Вот в чём Ваша главная ошибка: цикл вывода массива должен быть внутри блока else, а у Вас он отдельно, поэтому массив выводится во всех случаях!
Кыдырбеков Азат
1. Удалите уже строку #define n 5
2. Объявите n как переменную, удалите ненужную переменную d
3. Вводите значение в переменную n
2. Объявите n как переменную, удалите ненужную переменную d
3. Вводите значение в переменную n
Кыдырбеков Азат
И ещё совет: избегайте вводить / выводить то, есть чего не требуется по условию. Тестирование по stdin/stdout чувствительно к тому, что не предусмотрено тестами.
Например, сказано, что вывод с новой строки, значит, оправдано cout << endl; в соответствующем месте.
А вот после выведенного cout << endl; лучше не указывать.
Например, сказано, что вывод с новой строки, значит, оправдано cout << endl; в соответствующем месте.
А вот после выведенного cout << endl; лучше не указывать.
Похожие вопросы
- Помогите дописать код с массивом C++
- Помогите дописать код с массивом c++
- Создат код с помощью массивов и указателей. с++
- Программа не выполняет условия задания, исходный массив меняет сам себя, помогите найти ошибку
- Код должен находить наименьшее число в массиве, но это всегда почему то 0. Где ошибка?
- Ошибка в динамическом массиве new[] и delete[] |С++ Builder
- Помогите дописать код с массивом
- Помогите дописать код с массивом?
- Написать фрагмент кода, где формируется двумерный массив, элементы которого могут быть тру и фолс
- C++ Нужен код c++ с массивов.
на box[i] = l + rand() % , чтобы подогнать под ответ системы. Метод swap облегчает задачу конечно, чтобы не создавать временную переменную.