Дан линейный массив на 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 << ' ';
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости