Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
1

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

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

Author24 — интернет-сервис помощи студентам
условие: задан массив целочисленный состоящий из 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2012, 23:24
Ответы с готовыми решениями:

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

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

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

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

11
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
13.02.2012, 23:36 2
Цитата Сообщение от crewww Посмотреть сообщение
посмотрите насколько я прав и вообще правильно ли я понял условие
В некоторых случаях Ваша программа работает и иногда даже работает правильно
Но!
(переделано под 5 елементов)
На скрине виден тест, когда все абсолютно неправильно. По идее максимум нужно просто вынести наперед. Даже не один - все максимумы. В тесте должно быть ответом: 5, 5, 1, 3, 4. А в действительности ?...
P.S. Возможно моя критика на счет всех максимумов неверна, так как в условии написано только "первый максимум" а о втором история умалчивает... Но даже при таком раскладе ответ, полученный на мой тест, неверный...
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.02.2012, 23:41 3
ШКІПЕР, а по-моему все верно. ТС написал, что первый максимум должен оказаться на первом месте. Первый максимум в массиве - {1,5,3,4,5}. Значит ответ {5,3,4,5,1}
0
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
13.02.2012, 23:44 4
Цитата Сообщение от I.M. Посмотреть сообщение
первый максимум должен оказаться на первом месте.
Цитата Сообщение от crewww Посмотреть сообщение
первый максимум стал на первом месте то есть присвоить a[0] этот максимум
Тогда почему первый элемент сохраняется ? Разве он не должен затереться ?
0
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
13.02.2012, 23:47 5
ШКІПЕР, ТС писал:
Цитата Сообщение от crewww Посмотреть сообщение
циклический сдвиг влево
Т.е. ничего не затирается, мы переносим элементы массива из его начала в конец. Поэтому в вашем примере число 1 переместилось на посл. место массива
0
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
13.02.2012, 23:52 6
Цитата Сообщение от crewww Посмотреть сообщение
циклический сдвиг влево
I.M., все - переубедил У меня больше нет замечений.
0
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
99 / 99 / 22
Регистрация: 14.04.2010
Сообщений: 280
Записей в блоге: 9
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
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
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
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
30 / 1 / 1
Регистрация: 28.10.2010
Сообщений: 102
14.02.2012, 00:42  [ТС] 11
Цитата Сообщение от easybudda Посмотреть сообщение
Переместилась на 2 позиции влево.

crewww, на первый взгляд, наверное жутковато...
на первый взгляд - да жутковато...
что вы можете сказать насчет моего решение которое на пост повыше
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.02.2012, 01:13 12
Цитата Сообщение от crewww Посмотреть сообщение
что вы можете сказать насчет моего решение которое на пост повыше
Раз пять перечитал, так и не понял, как оно работает, но компилируется и результат правильный выдаёт...
0
14.02.2012, 01:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2012, 01:13
Помогаю со студенческими работами здесь

Функция: циклический сдвиг элементов массива влево
нужен код программы, которая сдвигает элементы массива на 1 влево, тоесть было 1 5 6 8 9, стало 5 6...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru