Дан линейный массив на N элементов. Выполнить циклический сдвиг всех его элементов на один влево начиная с первого нулевого элемента. Нулевой элемент обязательно существует.
input: 1 0 3 4 5
output: 1 3 4 5 0
Написал код, все ручные проверки проходит, но сайт не принимает как верное решение.
#include <iostream>
using namespace std;
int main()
{
int n,from;
cin >> n;
int arr[n];
for (int i=0;i<n;i++)
{
cin >> arr[i];
if (arr[i]==0) from=i;
}
for(int i=from+1;i<n;i++)
{
arr[i-1]=arr[i];
}
arr[n-1]=0;
for (int i=0;i<n;i++)
{
cout << arr[i] << " ";
}
return 0;
}
Если будет несколько нулей, запомнится (как говорил Штирлиц) последняя позиция :
for (int i=0;i<n;i++)
{
cin >> arr[i];
if (arr[i]==0) from=i;
}
Во первых обратите внимание на комментарий: "Массив с размером, задаваемым переменной - это VLA из языка С. В языке С++ нет VLA и размер массива может задаваться только константным целочисленным выражением. – AnT
". Во вторых, инструментами C++, это можно написать гораздо проще. Например:
std::valarray<int> v{1, 6, 0, 11, 3, 0, 4, 5};
for (size_t i = 0; i < v.size(); ++i)
if(!v[i]) {
const std::slice_array<int>& s = v[std::slice(i, v.size() - i, 1)];
std::valarray<int> v1(s);
s = v1.cshift(1);
//т.е. в данный срез копируем циклически сдвинутую
//последовательность этого же среза
break;
}
for (int i : v)
cout << i << ' ';
Виртуальный выделенный сервер (VDS) становится отличным выбором
Хочу подключить библиотеку variant (Которая на некоторых сайтах указывается как стандартная и есть на С++17), но мне выдает ошибку No such file or directory
Всем привет! Такой вопросНастроил эффект ripple на кнопку
Запускаю через Jenkins тест на виртуальной машинеОн проходит успешно, но на моменте записи результатов об окончании теста возникает ошибка: