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

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

Войти
Регистрация
Восстановить пароль
 
Mirzo
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 6
#1

В массиве перевернуть каждую группу из N элементов - C++

12.03.2011, 23:40. Просмотров 535. Ответов 4
Метки нет (Все метки)

Задан массив A(M), число элементов которого кратно N.
Переверните каждую группу из N элементов модифицируйте массив A.
Тест. 1; 2; 3; 4; 9; 7; 0; 2; 5; 6; 7; 8. N = 4
Результат. 4; 3; 2; 1; 2; 0; 7; 9; 8; 7; 6; 5
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2011, 23:40     В массиве перевернуть каждую группу из N элементов
Посмотрите здесь:

В массиве каждую группу рядом стоящих одинаковых элементов заменить одним и тем же значением - C++
в массиве целых чисел каждую группу рядом стоящих одинаковых элементов заменить на одним и тем же значением

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

нужно описать программу. т.е. каждую команду и каждую группу нужно расписать. подсобите пожалуйста - C++
#include <iostream> #include <conio.h> using namespace std; #define K_TO_M 0.6214 #define M_TO_K 1.6093 int main() { int k;...

Каждую серию элементов в массиве увеличить на 1 элемент - C++
Такая задача на С++. В каждую серию элементов добавить еще один такой же элемент. Помогите решить все что я смогу написать: #include...

Заменить каждую группу точек тремя точками - C++
Прошу помощи Ввести последовательность символов и заменить каждую группу точек, стоящих подряд в последовательности, тремя точками.

Каждую группу символов 120 в числе заменить на 478 - C++
Помогите пожалуйста, никак не получается 2. Дано число. Каждую группу символов 120 в том числе заменить символы 478.

Каждую группу символов 120 в числе заменить символы 478 - C++
Дано число. Каждую группу символов 120 в этом числе заменить символы 478.

Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел - C++
Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел

Удалить группы пробелов, которыми начинается и заканчивается строка, а каждую внутреннюю группу пробелов заменить одним пробелом - C++
Задана строка символов. Преобразовать эту строку следующим образом: удалить группы пробелов, которыми начинается и заканчивается строка, а...

В данном массиве найти самую длинную группу из записанных подряд элементоводного знака - C++
1.В данном массиве найти самую длинную группу из записанных подряд элементоводного знака.

В массиве целых чисел найти и удалить группу максимальной длины, являющуюся монотонной последовательностью - C++
Задание : В массиве целых чисел найти и удалить группу максимальной длины, элементы которой представляют собой монотонно возрастающую...

В массиве целых чисел найти предпоследнюю группу, состоящую из возрастаю- щей последовательности цифр - C++
1 В массиве целых чисел найти предпоследнюю группу, состоящую из возрастаю- щей последовательности цифр одна тема - одна задача,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VASSUV
MiThEoN
412 / 278 / 15
Регистрация: 31.10.2009
Сообщений: 415
Записей в блоге: 2
Завершенные тесты: 1
12.03.2011, 23:48     В массиве перевернуть каждую группу из N элементов #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
#include <conio.h>
#define M 12
#define N 4
void main()
{
    int A[M] ={ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    int i = 0, j = 0, k = 0;
    while(i < M)
    {
        if(i<j*N+(int)((N)/2))
        {
            A[i] += A[i - k + N - 1 - k]; 
            A[i - k + N - 1 - k] = A[i] - A[i - k + N - 1 - k] ; 
            A[i] = A[i] - A[i - k + N - 1 - k] ; 
            k++;
        }
        printf("%d ", A[i]);
        i++;
        if(i%N == 0)
        {
            k = 0;
            j++;
        }
    }
    getch();
}
Mirzo
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 6
13.03.2011, 00:01  [ТС]     В массиве перевернуть каждую группу из N элементов #3
А можно сделать с двумя циклами но по проще!
Чтоб понятнее было
easybudda
Эксперт С++
9458 / 5471 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
13.03.2011, 00:55     В массиве перевернуть каждую группу из N элементов #4
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
#include <stdio.h>
 
void dump(int * arr, size_t size){
    while ( size-- )
        printf("%d ", *arr++);
}
 
#define M 12
#define N 4
 
int main(void){
    int arr[M] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, i, j, k, tmp;
    
    printf("Before: ");
    dump(arr, M);
    for ( i = N; i <= M; i += N ){
        for ( j = i - N, k = i - 1; j < k; ++j, --k ){
            tmp = arr[j];
            arr[j] = arr[k];
            arr[k] = tmp;
        }
    }
    printf("\nAfter:  ");
    dump(arr, M);
    
    printf("\n");
    return 0;
}
Добавлено через 3 минуты
Другой вариант
C
1
2
3
4
5
6
7
8
9
...
    for ( i = 0; i < M; i += N ){
        for ( j = i, k = i + N - 1; j < k; ++j, --k ){
            tmp = arr[j];
            arr[j] = arr[k];
            arr[k] = tmp;
        }
    }
...
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
13.03.2011, 11:02     В массиве перевернуть каждую группу из N элементов #5
Вот совсем без циклов, для общего развития:
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
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define M 12
#define N 6
 
void swap(void* a, void* b, void* buf, size_t size);
void swapGroup(int* array, size_t arraySize, size_t groupSize, int currGroupSize);
void dump(const int* array, size_t size);
 
int main(void)
{
    int array[M] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
 
    puts("Initial array:");
    dump(array, M);
    swapGroup(array, M, N, N);
    puts("The result:");
    dump(array, M);
    
    exit(0);
}
 
void swap(void* a, void* b, void* buf, size_t size)
{
    memcpy(buf, a, size);
    memcpy(a, b, size);
    memcpy(b, buf, size);
}
 
void swapGroup(int* array, size_t arraySize, size_t groupSize, int currGroupSize)
{
    static int buf;
    
    if(arraySize == 0)
    return;
 
    if(currGroupSize <= 0)
    currGroupSize = groupSize, array += groupSize / 2;
 
    swap(array, array + currGroupSize - 1, &buf, sizeof(int));
    swapGroup(array + 1, arraySize - 2, groupSize, currGroupSize - 2);
}
 
void dump(const int* array, size_t size)
{
    if(size == 0)
    {
    putchar('\n');
    return;
    }
    
    printf("%d ", *array);
    dump(array + 1, size - 1);
}
Yandex
Объявления
13.03.2011, 11:02     В массиве перевернуть каждую группу из N элементов
Ответ Создать тему
Опции темы

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