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

Осуществить сдвиг элементов массива вправо на k позиций - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
sasha008
 Аватар для sasha008
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 41
19.03.2014, 10:59     Осуществить сдвиг элементов массива вправо на k позиций #1
Всем привет , помогите пожалуйста решить эту задачу на языке Си
9. Дан целочисленный массив размера N. Осуществить сдвиг вправо на k позиций, где k – сумма четных элементов
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 10:59     Осуществить сдвиг элементов массива вправо на k позиций
Посмотрите здесь:

Осуществить сдвиг элементов массива влево на K позиций C++
C++ Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
C++ Сдвиг элементов массива циклически на a позиций вправо
Одномерный массив. Осуществить сдвиг вправо на k позиций C++
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента C++
Осуществить циклический сдвиг массива вправо на m позиций C++
C++ Осуществить циклический сдвиг элементов массива вправо на k позиций
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
755 / 688 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
19.03.2014, 11:04     Осуществить сдвиг элементов массива вправо на k позиций #2
Что значит "сдвиг вправо"?
sasha008
 Аватар для sasha008
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 41
19.03.2014, 11:20  [ТС]     Осуществить сдвиг элементов массива вправо на k позиций #3
я вот это не знаю(
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.03.2014, 11:21     Осуществить сдвиг элементов массива вправо на k позиций #4
Цитата Сообщение от John Prick Посмотреть сообщение
Что значит "сдвиг вправо"?
скорее всего это циклический сдвиг. См. например std::rotate
John Prick
755 / 688 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
19.03.2014, 11:24     Осуществить сдвиг элементов массива вправо на k позиций #5
Цитата Сообщение от Tulosba Посмотреть сообщение
скорее всего это циклический сдвиг. См. например std::rotate
Я тоже так подумал, но это лишь догадкой может быть. К тому же "сумма четных элементов" может в несколько раз превосходить размер массива. Как тут двигать? В лоб ли, или вычислить остаток...
В общем задание требует уточнения.
sasha008
 Аватар для sasha008
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 41
19.03.2014, 11:25  [ТС]     Осуществить сдвиг элементов массива вправо на k позиций #6
мы проходим одномерные массивы
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
19.03.2014, 11:37     Осуществить сдвиг элементов массива вправо на k позиций #7
Цитата Сообщение от John Prick Посмотреть сообщение
К тому же "сумма четных элементов" может в несколько раз превосходить размер массива.
И что же? Для циклического сдвига это не принципиально.
sasha008
 Аватар для sasha008
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 41
19.03.2014, 12:37  [ТС]     Осуществить сдвиг элементов массива вправо на k позиций #8
Tulosba, Вот пример из методички


Пример 2. Дан массив А[n].Осуществить сдвиг вправо на К позиций.

Программа может иметь следующий вид:
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
40
41
42
43
44
45
#include <stdlib.h>
 
# include <conio.h>
 
# include <stdio.h>
 
#define n 10
 
int main ()
 
{  int buf,j, K,i, a[n];
 
       for (i = 0; i < n; i++)
 
         a[i]=rand()%10-5;
 
    K=4;
 
                      printf ("\n \n Сгенерированный массив a[n]\n");
 
 for (i=0;i<n;i++) 
 
   printf ("%d ",a[i]);
 
     for (i=0;i<K;i++)
 
   { buf=a[n-1];
 
      for(j=n-1;j>0;j--)
 
      a[j]=a[j-1];
 
      a[0]=buf;    }
 
           printf ("\n \n Сдвиг элементов массива a[n]на %d позиций \n", K);
 
    for (i=0;i<n;i++)
 
      printf ("%d ",a[i]);
 
    printf ("\n");
 
  system("PAUSE"); 
 
  return 0;}
John Prick,
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2274 / 990 / 226
Регистрация: 30.11.2013
Сообщений: 3,297
19.03.2014, 12:41     Осуществить сдвиг элементов массива вправо на k позиций #9
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
40
41
42
43
44
#include <iostream>
#include <time.h>
 
using namespace std;
 
void main(){
    srand(time(0));
    const int size = 10;
    int arr[size] = {};
    
    for(int i=0;i<size;i++)
        arr[i] = rand()%20;
 
 
 
    for(int i =0;i<size;i++) // первичный показ массива
        cout << arr[i] << " ";
 
    int zdvig = 0;
    for(int i =0;i<size;i++) // нахождение переменной сдвиг
        if(arr[i]%2 == 0)
            zdvig += arr[i];
 
    while(zdvig >= size) // если сдвиг приведёт к "перекрутки" исправляем это
    {
        zdvig -= size;
    }
 
    if(zdvig > 0) // если сдвиг больше нуля - тоесть всё же надо крутить - крутим
    {
        for(int b =0; b < zdvig;b++) // итератор сдвига
            for(int i =size-1;i>0;i--) // сам сдвиг
            {
                int x = arr[i];
                arr[i] = arr[i-1];
                arr[i-1] = x;
            }
 
    }
    
    cout << endl << "Peremenaya sdvig = " << zdvig << endl;
    for(int i =0;i<size;i++) // вторичный показ массива
        cout << arr[i] << " ";
}
sasha008
 Аватар для sasha008
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 41
19.03.2014, 13:07  [ТС]     Осуществить сдвиг элементов массива вправо на k позиций #10
rikimaru2013, я вот так начал делать а решение сдвигом поставил с шаблона и программа находит ошибку там

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
40
41
42
43
44
#include<iostream>
#include<stdio.h>
#include<conio.h>
int main()
{
      setlocale(LC_ALL,"rus"); 
      int N; 
      printf("Ââåäèòå N=");   // Ââîäèì  Г°Г*çìåð Г¬Г*Г±Г±ГЁГўГ*
      scanf("%d",&N);
      int i,mas[N],k=0,    buf,j;
      for(i=0; i<N; i++)
               {
                    printf("Ââåäèòå ÝëåìåГ*ГІ ГЊГ*Г±Г±ГЁГўГ*=");  // Ââîäèì Г§Г*Г*Г·ГҐГ*ГЁГҐ Г¬Г*Г±Г±ГЁГўГ*
                    scanf("%d",&mas[i]);
               }
      for(i=0; i<N; i++)     // ГЌГ*õîäèì ГЉ
               {
                    if (mas[i]%2 == 0)            
                   {
                       k +=mas[i];
                   }
               }  
////////////////////////////////////////////////////////////////////////////////////////               
      printf ("\n \n ÑãåГ*åðèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў mas[n]\n"); // Ñäâèã
      for (i=0;i<N;i++) 
      printf ("%d ",mas[i]);
             for(i=0;i<K;i++)
             { buf=mas[N-1];
             
               for(j=N-1;j>0;j--)
               mas[j]=a[j-1];
               mas[0]=buf;    
               }
               
               for (i=0;i<n;i++)
      printf ("%d ",a[i]);
      printf ("\n");
               
      printf ("\n \n Ñäâèã ýëåìåГ*òîâ Г¬Г*Г±Г±ГЁГўГ* mas[n]Г*Г* %d ïîçèöèé \n", K);     
//////////////////////////////////////////////////////////////////////////////////////// 
      printf("\nk=%d \n",k);
      system("pause");
      return 0;
}
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,186
19.03.2014, 13:10     Осуществить сдвиг элементов массива вправо на k позиций #11
мдя каждый месяц один и тот же вопрос
Функция сдвига массива
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2014, 13:29     Осуществить сдвиг элементов массива вправо на k позиций
Еще ссылки по теме:

C++ Цикличиский сдвиг элементов массива вправо на k позиций
Осуществить циклический сдвиг элементов одномерного массива на k позиций C++
Осуществить циклический сдвиг элементов массива влево на k позиций C++
C++ Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций
C++ Циклический сдвиг элементов массива вправо на К позиций

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

Или воспользуйтесь поиском по форуму:
sasha008
 Аватар для sasha008
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 41
19.03.2014, 13:29  [ТС]     Осуществить сдвиг элементов массива вправо на k позиций #12
я решил задачку
Yandex
Объявления
19.03.2014, 13:29     Осуществить сдвиг элементов массива вправо на k позиций
Ответ Создать тему
Опции темы

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