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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
03.02.2013, 09:21     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) #1
Вот дана такая задача
Напишите программу, которая циклически сдвигает элементы массива вправо (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;
}
Пожалуйста ребят помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 09:21     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо)
Посмотрите здесь:

Циклический сдвиг прямоугольной матрицы на n элементов вправо C++
C++ Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
C++ Осуществить циклический сдвиг элементов в мат-це на k элементов вправо или вниз (в зависимости от введенного режима). Число k может быть больше кол-ва
Циклический сдвиг массива влево и вправо C++
C++ Дано одномерный массив Х, размером 15 элементов. Провести циклический сдвиг элементов в массиве вправо на 2 позиции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Михан
 Аватар для Михан
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;
}
Пожалуйста ребят помогите
А в чем проблема то? Конкретнее скажи
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
03.02.2013, 09:49  [ТС]     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) #3
Цитата Сообщение от Михан Посмотреть сообщение
А в чем проблема то? Конкретнее скажи
Да на сайте informatics.mccme.ru есть данная задача отправляю для проверки там выходит что частичное решение и правильных из 5 ответов только 2.. я уже и массив увеличил.. Все равно то же самое..
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;
}
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;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
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;
}
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 минуту
Вот тут решение хитрое:
Одномерный массив. Циклический сдвиг вправо
За ошибку извиняюсь, но за код ручаюсь.. КОД ПРАВИЛЬНЫЙ
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
05.02.2013, 17:29     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) #8
Цитата Сообщение от zaritmom Посмотреть сообщение
КОД ПРАВИЛЬНЫЙ
Он был бы правильным, если б вы сделали ввод либо как у меня, либо вот таким хитрым образом:
Цитата Сообщение от zaritmom Посмотреть сообщение
cin>>arr[i%n];
А так смотрите:
Допустим у нас массив на 3 элемента. Всего он содержит элемент с индексом 0, элемент с индексом 1 и элемент с индексом 2. Все, 3 штуки, а если мы попробуем обратиться к элементу с индексом, равным размеру массива, то там будет просто выход за пределы и будем мы работать с мусором.
Далее. Вы объявили очень большой массив. А если мы будем использовать лишь 3 элемента, зачем остальная выделенная память? Это еще не критично, а вот что, если вдруг массив окажется очень большим (число элементов превысит ваш условный максимум, то бишь > 100100), что тогда?
Так вот, для того, чтобы работать с массивом, размер которого определяется во время выполнения используют динамические массивы.
Так что отличайте понятия код работает с моими данными и код правильный.

ну и не пишите красным капслоком, на форуме НЕ СЛЕПЫЕ!
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) сделал как бы цикл без последнего элемента... Надеюсь поняли..
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
05.02.2013, 17:38     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) #10
Цитата Сообщение от zaritmom Посмотреть сообщение
Я понял в чём ваша ошибка

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 17:41     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
zaritmom
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 13
05.02.2013, 17:41  [ТС]     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо) #11
MrGluck, Все же спасибо кстати ваш код тоже очень интересный.. Я его разобрал.. Ну если честно он мне немного сложнее чем тот который я составил...
Yandex
Объявления
05.02.2013, 17:41     Ребят я не могу понять где ошибка (циклический сдвиг элементов массива вправо)
Ответ Создать тему
Опции темы

Текущее время: 02:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru