Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 18
1

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

03.02.2013, 09:21. Просмотров 7025. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2013, 09:21
Ответы с готовыми решениями:

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

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

Циклический сдвиг элементов массива вправо
Здравствуйте. Помогите написать код, выполняющий циклический сдвиг элементов массива вправо в...

Циклический сдвиг элементов массива вправо
Дан одномерный массив числовых значений, насчитывающий N элементов. Выполнить перемещение...

10
9 / 9 / 3
Регистрация: 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
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 18
03.02.2013, 09:49  [ТС] 3
Цитата Сообщение от Михан Посмотреть сообщение
А в чем проблема то? Конкретнее скажи
Да на сайте informatics.mccme.ru есть данная задача отправляю для проверки там выходит что частичное решение и правильных из 5 ответов только 2.. я уже и массив увеличил.. Все равно то же самое..
0
2 / 2 / 2
Регистрация: 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
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 18
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
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
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
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 18
05.02.2013, 17:22  [ТС] 7
Цитата Сообщение от MrGluck Посмотреть сообщение
не правильный он вовсе, индексация массива начинается с 0.
C++
1
for(i=0;i<n;i++){
Добавлено через 1 минуту
Вот тут решение хитрое:
Одномерный массив. Циклический сдвиг вправо
За ошибку извиняюсь, но за код ручаюсь.. КОД ПРАВИЛЬНЫЙ
0
Форумчанин
Эксперт CЭксперт С++
8161 / 5009 / 1436
Регистрация: 29.11.2010
Сообщений: 13,455
05.02.2013, 17:29 8
Цитата Сообщение от zaritmom Посмотреть сообщение
КОД ПРАВИЛЬНЫЙ
Он был бы правильным, если б вы сделали ввод либо как у меня, либо вот таким хитрым образом:
Цитата Сообщение от zaritmom Посмотреть сообщение
cin>>arr[i%n];
А так смотрите:
Допустим у нас массив на 3 элемента. Всего он содержит элемент с индексом 0, элемент с индексом 1 и элемент с индексом 2. Все, 3 штуки, а если мы попробуем обратиться к элементу с индексом, равным размеру массива, то там будет просто выход за пределы и будем мы работать с мусором.
Далее. Вы объявили очень большой массив. А если мы будем использовать лишь 3 элемента, зачем остальная выделенная память? Это еще не критично, а вот что, если вдруг массив окажется очень большим (число элементов превысит ваш условный максимум, то бишь > 100100), что тогда?
Так вот, для того, чтобы работать с массивом, размер которого определяется во время выполнения используют динамические массивы.
Так что отличайте понятия код работает с моими данными и код правильный.

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

Не по теме:

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

0
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 18
05.02.2013, 17:41  [ТС] 11
MrGluck, Все же спасибо кстати ваш код тоже очень интересный.. Я его разобрал.. Ну если честно он мне немного сложнее чем тот который я составил...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2013, 17:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Циклический сдвиг элементов массива вправо
апишите программу, которая циклически сдвигает элементы массива вправо (0-й элемент становится 1-м,...

Выполнить циклический сдвиг элементов массива вправо
Заполнить массив случайными числами и выполнить циклический сдвиг элементов массива вправо на 1...

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

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


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

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

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