Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
#1

Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) - C++

03.02.2013, 09:21. Просмотров 1911. Ответов 10
Метки нет (Все метки)

Вот дана такая задача
Напишите программу, которая циклически сдвигает элементы массива вправо (0-й элемент становится 1-м, 1-й становится 2-м, ..., последний становится 0-м, то есть массив {3, 5, 7, 9} превращается в массив {9, 3, 5, 7}).

Формат входных данных

Сначала задано число N - количество элементов в массиве. Далее через пробел записаны N чисел - элементы массива.
Формат выходных данных
Выведите элементы получившегося массива.
Пример


Ввод Вывод

3
1 2 3 3 1 2


А вот моё решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# include <iostream>
using namespace std;
int main()
{
    long long n,i;
    int arr[100100];
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>arr[i];
    }
    cout<<arr[n]<<" ";
    for(i=1;i<=arr[n-1];i++){
        cout<<i<<" ";
    }
    return 0;
}
Пожалуйста ребят помогите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 09:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) (C++):

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента - C++
Помогите пожалуйста решить эту задачу, Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций,...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента. - C++
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.

Произвести циклический сдвиг вправо элементов массива - C++
Люди в Си++ дуб дубом. Помагите очень надо. Вот текст задачи. Ввести одномерный целочисленный массив A, вывести его. Произвести...

Циклический сдвиг элементов массива вправо на К позиций - C++
Дан массив размера N и число К (0&lt;k&lt;5, K&lt;n) Осуществить циклический сдвиг элементов массива вправо на К позиций .

Осуществить циклический сдвиг элементов массива вправо на k позиций - C++
Решаю задачи на сервере одном, задание было &quot;Дан массив размера N ≥ 2 и число k (0 &lt; k &lt; N). Осуществить циклический сдвиг элементов...

Циклический сдвиг четных строк двумерного массива на k элементов вправо - C++
Помогите, как организовать циклический сдвиг на k элементов вправо? #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;clocale&gt;...

10
Михан
8 / 8 / 1
Регистрация: 05.11.2009
Сообщений: 74
03.02.2013, 09:47 #2
Цитата Сообщение от zaritmom Посмотреть сообщение
Вот дана такая задача
Напишите программу, которая циклически сдвигает элементы массива вправо (0-й элемент становится 1-м, 1-й становится 2-м, ..., последний становится 0-м, то есть массив {3, 5, 7, 9} превращается в массив {9, 3, 5, 7}).

Формат входных данных

Сначала задано число N - количество элементов в массиве. Далее через пробел записаны N чисел - элементы массива.
Формат выходных данных
Выведите элементы получившегося массива.
Пример


Ввод Вывод

3
1 2 3 3 1 2


А вот моё решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# include <iostream>
using namespace std;
int main()
{
    long long n,i;
    int arr[100100];
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>arr[i];
    }
    cout<<arr[n]<<" ";
    for(i=1;i<=arr[n-1];i++){
        cout<<i<<" ";
    }
    return 0;
}
Пожалуйста ребят помогите
А в чем проблема то? Конкретнее скажи
0
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
03.02.2013, 09:49  [ТС] #3
Цитата Сообщение от Михан Посмотреть сообщение
А в чем проблема то? Конкретнее скажи
Да на сайте informatics.mccme.ru есть данная задача отправляю для проверки там выходит что частичное решение и правильных из 5 ответов только 2.. я уже и массив увеличил.. Все равно то же самое..
0
Dummy_1
2 / 2 / 0
Регистрация: 22.01.2013
Сообщений: 59
03.02.2013, 12:25 #4
я не совсем понял, что твой 2й цикл делает.
а вот мой вариант решения( я использую динамическое выделение памяти, почитай, если не слышал про такое):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# include <iostream>
using namespace std;
 
int main(int argc, char const *argv[])
{
    int *a;
    int n;
 
    cout<<"Put your array's length:\n";
    cin>>n;
    
    
    a=new int[n];
 
    
    for (int i = 0; i < n; ++i)
    {
        a[i]=i;
    }
 
    
    for (int i = 0; i < n; ++i)
    {
        cout<<a[i]<<" ";
    } cout<< endl;
 
    
    for (int i = 0; i < n; ++i)
    {
        a[i]=n-i-1;
        cout<<a[i]<<" ";
    } cout<<endl;
 
    
    delete []a;
 
    cin.get(); cin.ignore();
    return 0;
}
0
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
05.02.2013, 17:13  [ТС] #5
Dummy_1,
Михан, Ребят, Спасибо но я решил вот правельный код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# include <iostream>
using namespace std;
int main()
{
    long long n,i;
    int arr[100100];
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>arr[i];
    }
    cout<<arr[n]<<" ";
    for(i=1;i<=n-1;i++){
        cout<<arr[i]<<" ";
    }
    return 0;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7417 / 4532 / 671
Регистрация: 29.11.2010
Сообщений: 12,281
05.02.2013, 17:21 #6
Цитата Сообщение от zaritmom Посмотреть сообщение
правильный код
не правильный он вовсе, индексация массива начинается с 0.
C++
1
for(i=0;i<n;i++){
Добавлено через 1 минуту
Вот тут решение хитрое:
Одномерный массив. Циклический сдвиг вправо

Добавлено через 3 минуты
тут все еще проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
int main()
{
    int n;
    std::cin >> n;
    int *arr = new int[n];
    for (int i=1; i < n; i++)
        std::cin >> arr[i];
    std::cin >> arr[0];
    for (int i=0; i < n; i++)
        std::cout << arr[i] << " ";
    delete []arr;
}
1
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
05.02.2013, 17:22  [ТС] #7
Цитата Сообщение от MrGluck Посмотреть сообщение
не правильный он вовсе, индексация массива начинается с 0.
C++
1
for(i=0;i<n;i++){
Добавлено через 1 минуту
Вот тут решение хитрое:
Одномерный массив. Циклический сдвиг вправо
За ошибку извиняюсь, но за код ручаюсь.. КОД ПРАВИЛЬНЫЙ
0
MrGluck
Модератор
Эксперт CЭксперт С++
7417 / 4532 / 671
Регистрация: 29.11.2010
Сообщений: 12,281
05.02.2013, 17:29 #8
Цитата Сообщение от zaritmom Посмотреть сообщение
КОД ПРАВИЛЬНЫЙ
Он был бы правильным, если б вы сделали ввод либо как у меня, либо вот таким хитрым образом:
Цитата Сообщение от zaritmom Посмотреть сообщение
cin>>arr[i%n];
А так смотрите:
Допустим у нас массив на 3 элемента. Всего он содержит элемент с индексом 0, элемент с индексом 1 и элемент с индексом 2. Все, 3 штуки, а если мы попробуем обратиться к элементу с индексом, равным размеру массива, то там будет просто выход за пределы и будем мы работать с мусором.
Далее. Вы объявили очень большой массив. А если мы будем использовать лишь 3 элемента, зачем остальная выделенная память? Это еще не критично, а вот что, если вдруг массив окажется очень большим (число элементов превысит ваш условный максимум, то бишь > 100100), что тогда?
Так вот, для того, чтобы работать с массивом, размер которого определяется во время выполнения используют динамические массивы.
Так что отличайте понятия код работает с моими данными и код правильный.

ну и не пишите красным капслоком, на форуме НЕ СЛЕПЫЕ!
0
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
05.02.2013, 17:34  [ТС] #9
Я понял в чём ваша ошибка вы не поняли мой код обратите внимания на то что я написал перед 2 циклом, я написал cout<<arr[n] то-есть, я сделал так что-бы последний элемент, стал на 1 место, ну а в for(i=1;i<=n-1;i++) я (n-1) сделал как бы цикл без последнего элемента... Надеюсь поняли..
0
MrGluck
Модератор
Эксперт CЭксперт С++
7417 / 4532 / 671
Регистрация: 29.11.2010
Сообщений: 12,281
05.02.2013, 17:38 #10
Цитата Сообщение от zaritmom Посмотреть сообщение
Я понял в чём ваша ошибка

Не по теме:

zaritmom, конечно, учи меня, экого безграмотного

0
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
05.02.2013, 17:41  [ТС] #11
MrGluck, Все же спасибо кстати ваш код тоже очень интересный.. Я его разобрал.. Ну если честно он мне немного сложнее чем тот который я составил...
0
05.02.2013, 17:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 17:41
Привет! Вот еще темы с ответами:

Осуществить циклический сдвиг элементов массива вправо на одну позицию - C++
4Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на одну позицию (при этом A 1 перейдет в A 2 , A 2 — в A 3 ,...

Циклический сдвиг массива вправо - C++
дан двумерный массив MxN нужно осуществить поэлементный сдвиг вправо на 1 элемент

Циклический сдвиг массива влево и вправо - C++
Нужно реализовать циклический сдвиг массива влево и вправо! Например есть массив int- {121605}? mass_len=6, нужно чтобы после сдвига...

Осуществить циклический сдвиг массива вправо на m позиций - C++
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn (1&lt;=n&lt;=20). Элементы массива принимают значения от 0 до 255 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru