C++ циклический сдвиг влево [закрыт]

111
27 августа 2019, 22:10

Дан линейный массив на 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;
}
Answer 1

Если будет несколько нулей, запомнится (как говорил Штирлиц) последняя позиция :

 for (int i=0;i<n;i++)
  {
    cin >> arr[i];
    if (arr[i]==0) from=i;
  }
Answer 2

Во первых обратите внимание на комментарий: "Массив с размером, задаваемым переменной - это 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 << ' ';
READ ALSO
Не могу #include &lt;variant&gt;. C++

Не могу #include <variant>. C++

Хочу подключить библиотеку variant (Которая на некоторых сайтах указывается как стандартная и есть на С++17), но мне выдает ошибку No such file or directory

134
Эффект ripple некорректно работает на Android 9 (Api 28, Pie)

Эффект ripple некорректно работает на Android 9 (Api 28, Pie)

Всем привет! Такой вопросНастроил эффект ripple на кнопку

147
Jenknis. После успешного выполнения теста, выключает агента на виртуальной машине и отмечает тест как FILED

Jenknis. После успешного выполнения теста, выключает агента на виртуальной машине и отмечает тест как FILED

Запускаю через Jenkins тест на виртуальной машинеОн проходит успешно, но на моменте записи результатов об окончании теста возникает ошибка:

133