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

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

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

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

13.02.2012, 23:24. Просмотров 3471. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2012, 23:24     Циклический сдвиг массива влево
Посмотрите здесь:

Циклический сдвиг массива влево - C++
Дан массив y1, ... , y20. Сформировать массив Z1, ... , Z20, элементы которого соответствуют элементам yi , сдвинутым на одну позицию...

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

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

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

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

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

Циклический сдвиг влево - C++
Помогите написать программу которая будет осуществлять циклический сдвиг влево введённого числа на N разрядов (например, при сдвиге числа...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ШКІПЕР
94 / 94 / 7
Регистрация: 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. Возможно моя критика на счет всех максимумов неверна, так как в условии написано только "первый максимум" а о втором история умалчивает... Но даже при таком раскладе ответ, полученный на мой тест, неверный...
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
13.02.2012, 23:41     Циклический сдвиг массива влево #3
ШКІПЕР, а по-моему все верно. ТС написал, что первый максимум должен оказаться на первом месте. Первый максимум в массиве - {1,5,3,4,5}. Значит ответ {5,3,4,5,1}
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
13.02.2012, 23:44     Циклический сдвиг массива влево #4
Цитата Сообщение от I.M. Посмотреть сообщение
первый максимум должен оказаться на первом месте.
Цитата Сообщение от crewww Посмотреть сообщение
первый максимум стал на первом месте то есть присвоить a[0] этот максимум
Тогда почему первый элемент сохраняется ? Разве он не должен затереться ?
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
13.02.2012, 23:47     Циклический сдвиг массива влево #5
ШКІПЕР, ТС писал:
Цитата Сообщение от crewww Посмотреть сообщение
циклический сдвиг влево
Т.е. ничего не затирается, мы переносим элементы массива из его начала в конец. Поэтому в вашем примере число 1 переместилось на посл. место массива
ШКІПЕР
94 / 94 / 7
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
Завершенные тесты: 1
13.02.2012, 23:52     Циклический сдвиг массива влево #6
Цитата Сообщение от crewww Посмотреть сообщение
циклический сдвиг влево
I.M., все - переубедил У меня больше нет замечений.
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}
ШКІПЕР
94 / 94 / 7
Регистрация: 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 - вот что должно быть на мой тест...

Не по теме:

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

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;
}
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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;
}
crewww
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
14.02.2012, 00:42  [ТС]     Циклический сдвиг массива влево #11
Цитата Сообщение от easybudda Посмотреть сообщение
Переместилась на 2 позиции влево.

crewww, на первый взгляд, наверное жутковато...
на первый взгляд - да жутковато...
что вы можете сказать насчет моего решение которое на пост повыше
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.02.2012, 01:13     Циклический сдвиг массива влево
Еще ссылки по теме:

Циклический сдвиг в матрице в влево - C++
Пожалуйста обьясните мне процесс с описанием циклического сдвига в матрице на к элементов влево. Никак не могу понять принцип . ...

Одномерный массив. Циклический сдвиг влево - C++
Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K &lt; N). Осущест- вить циклический сдвиг элементов массива влево на K позиций (при этом...

Циклический сдвиг битов в байте влево или вправо - C++
Кто-нибудь пробовал реализовать такую задачу на С++. Если да, то какой алгоритм? Например, если 32 &lt;&lt; 10, то в результате должны...

Циклический сдвиг целого числа на n разрядов влево и вправо - C++
Такая ситуация. Написать функцию, циклически сдвигающую целое число на N разрядов вправо или влево, в зависимости от третьего параметра...

Квадратный массив N×N по диагонали влево вниз (циклический сдвиг) - C++
Эта программа выполняет циклический сдвиг по диагонали влево вверх, а надо по диагонали влево вниз. Код: #include&lt;iostream.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
14.02.2012, 01:13     Циклический сдвиг массива влево #12
Цитата Сообщение от crewww Посмотреть сообщение
что вы можете сказать насчет моего решение которое на пост повыше
Раз пять перечитал, так и не понял, как оно работает, но компилируется и результат правильный выдаёт...
Yandex
Объявления
14.02.2012, 01:13     Циклический сдвиг массива влево
Ответ Создать тему
Опции темы

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