Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.75
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
#1

Циклический сдвиг массива влево - C++

13.02.2012, 23:24. Просмотров 3746. Ответов 11
Метки нет (Все метки)

условие: задан массив целочисленный состоящий из 10 элементов
нужно сделать циклический сдвиг влево так чтобы первый максимум стал на первом месте то есть присвоить a[0] этот максимум
посмотрите насколько я прав и вообще правильно ли я понял условие
решение:
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
#include <iostream>
 
using namespace std;
 
int main()
{const int n=10;
int a[n]={3,5,7,42,3,67,2,6,4,2};
int i,j,r,max,ind;
for (i=0;i<n;i++)
 
  max=a[0]; 
  ind=0;
   for (i=1;i<=n;i++)
    if(max<a[i])
      {
       max=a[i]; 
       ind=i;
      }
     for(i=0;i<ind;i++)
       {
        r=a[0];
         for (j=0;j<n-1;j++)
           a[j]=a[j+1];
           a[n-1]=r;
       }
 
 
for (i=0;i<n;i++) cout<<a[i]<<" ";
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 23:24
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Циклический сдвиг массива влево (C++):

Циклический сдвиг массива влево
Дан массив y1, ... , y20. Сформировать массив Z1, ... , Z20, элементы которого...

Циклический сдвиг массива влево и вправо
Нужно реализовать циклический сдвиг массива влево и вправо! Например есть...

Циклический сдвиг элементов массива влево
Совершить циклический сдвиг элементов массива влево так, чтобы первый...

Циклический сдвиг элементов массива по диагонали влево вниз
Квадратный массив N×N по диагонали влево вверх. ...

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

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

11
ШКІПЕР
94 / 94 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
13.02.2012, 23:36 #2
Цитата Сообщение от crewww Посмотреть сообщение
посмотрите насколько я прав и вообще правильно ли я понял условие
В некоторых случаях Ваша программа работает и иногда даже работает правильно
Но!
http://10pix.ru/img1/2038/6827756.jpg (переделано под 5 елементов)
На скрине виден тест, когда все абсолютно неправильно. По идее максимум нужно просто вынести наперед. Даже не один - все максимумы. В тесте должно быть ответом: 5, 5, 1, 3, 4. А в действительности ?...
P.S. Возможно моя критика на счет всех максимумов неверна, так как в условии написано только "первый максимум" а о втором история умалчивает... Но даже при таком раскладе ответ, полученный на мой тест, неверный...
0
I.M.
566 / 549 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.02.2012, 23:41 #3
ШКІПЕР, а по-моему все верно. ТС написал, что первый максимум должен оказаться на первом месте. Первый максимум в массиве - {1,5,3,4,5}. Значит ответ {5,3,4,5,1}
0
ШКІПЕР
94 / 94 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
13.02.2012, 23:44 #4
Цитата Сообщение от I.M. Посмотреть сообщение
первый максимум должен оказаться на первом месте.
Цитата Сообщение от crewww Посмотреть сообщение
первый максимум стал на первом месте то есть присвоить a[0] этот максимум
Тогда почему первый элемент сохраняется ? Разве он не должен затереться ?
0
I.M.
566 / 549 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.02.2012, 23:47 #5
ШКІПЕР, ТС писал:
Цитата Сообщение от crewww Посмотреть сообщение
циклический сдвиг влево
Т.е. ничего не затирается, мы переносим элементы массива из его начала в конец. Поэтому в вашем примере число 1 переместилось на посл. место массива
0
ШКІПЕР
94 / 94 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
13.02.2012, 23:52 #6
Цитата Сообщение от crewww Посмотреть сообщение
циклический сдвиг влево
I.M., все - переубедил У меня больше нет замечений.
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
13.02.2012, 23:53  [ТС] #7
в самом условии задачи дан пример такой
A={3,4,5,3,4,5)
на выходе имеем
A={5,3,4,5,3,4}
0
ШКІПЕР
94 / 94 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
14.02.2012, 00:00 #8
Цитата Сообщение от crewww Посмотреть сообщение
в самом условии задачи дан пример такой
A={3,4,5,3,4,5)
на выходе имеем
A={5,3,4,5,3,4}
Yeah! Случилось то, о чем так долго говорили коммунисты. Все неправы
Куда делась последняя 5-ка ? Стала на место максимума ? Тогда сдвиг какой-то не сдвиг.


Добавлено через 2 минуты
5, 1, 5, 3, 4 - вот что должно быть на мой тест...

Не по теме:

Вот он! Тест моей мечты! :)

0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
14.02.2012, 00:28  [ТС] #9
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Yeah! Случилось то, о чем так долго говорили коммунисты. Все неправы
Куда делась последняя 5-ка ? Стала на место максимума ? Тогда сдвиг какой-то не сдвиг.
вот и я когда пример то начал разбирать понял что вообще неправ

Добавлено через 27 минут
абсолютно рабочий код
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
#include <iostream>
 
using namespace std;
 
int main()
{const int n=6;
int a[n];
int i,j,r,max,ind;
for (i=0;i<n;i++) cin>>a[i];
max=a[0]; ind=0;
for (i=0;i<n;i++)
 
  
  
   for (i=1;i<n;i++)
    if(max<a[i])
      {
       max=a[i]; 
       ind=i;
      }
     for(i=0;i<ind;i++)
       {
        r=a[0];
         for (j=0;j<n-1;j++)
           a[j]=a[j+1];
           a[n-1]=r;
       }
 
 
for (i=0;i<n;i++) cout<<a[i]<<" ";
 
    return 0;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,231
14.02.2012, 00:34 #10
Цитата Сообщение от ШКІПЕР Посмотреть сообщение
Куда делась последняя 5-ка ? Стала на место максимума ?
Переместилась на 2 позиции влево.

crewww, на первый взгляд, наверное жутковато...
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
#include <stdio.h>
#include <string.h>
 
#define SIZE(arr) ( sizeof(arr) / sizeof(*arr) )
 
int * first_max(const int * arr, const size_t size){
    return ( size < 2 ) ? (int*)arr : ( *arr < *(arr + size - 1) ) ? first_max(arr + 1, size - 1) : first_max(arr, size - 1);
}
 
void rotate_left(int * arr, const size_t size){
    int tmp = *arr;
    
    memmove(arr, arr + 1, sizeof(int) * (size - 1));
    arr[size - 1] = tmp;
}
 
void dump(const int * arr, size_t size){
    while ( size-- )
        printf("%d%c", *arr++, ( size ) ? ' ' : '\n');
}
 
int main(void){
    int arr[] = { 3, 4, 5, 3, 4, 5 };
    size_t steps;
    
    printf("Before: ");
    dump(arr, SIZE(arr));
    for ( steps = first_max(arr, SIZE(arr)) - arr; steps; --steps )
        rotate_left(arr, SIZE(arr));
    printf("After:  ");
    dump(arr, SIZE(arr));
    
    return 0;
}
0
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
14.02.2012, 00:42  [ТС] #11
Цитата Сообщение от easybudda Посмотреть сообщение
Переместилась на 2 позиции влево.

crewww, на первый взгляд, наверное жутковато...
на первый взгляд - да жутковато...
что вы можете сказать насчет моего решение которое на пост повыше
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,231
14.02.2012, 01:13 #12
Цитата Сообщение от crewww Посмотреть сообщение
что вы можете сказать насчет моего решение которое на пост повыше
Раз пять перечитал, так и не понял, как оно работает, но компилируется и результат правильный выдаёт...
0
14.02.2012, 01:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 01:13
Привет! Вот еще темы с решениями:

Осуществить циклический сдвиг элементов массива влево на одну позицию
Помогите, пожалуйста, решить программы на си++, если не решу мне хана, заранее...

Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево)
Написать программу, которая делает циклический сдвиг всех элементов массива а1,...

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


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

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

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