Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Mirzo
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 6
#1

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

12.03.2011, 23:40. Просмотров 589. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2011, 23:40
Ответы с готовыми решениями:

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

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

нужно описать программу. т.е. каждую команду и каждую группу нужно расписать. подсобите пожалуйста
#include <iostream> #include <conio.h> using namespace std; #define K_TO_M...

Найти количество простых чисел в массиве. Перевернуть все нечетные строки матрицы. Перевернуть каждое четное слово в строке
Ребята помогите разобраться в коде программы, написав подробные комменты к...

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

4
VASSUV
MiThEoN
439 / 305 / 33
Регистрация: 31.10.2009
Сообщений: 490
Записей в блоге: 2
Завершенные тесты: 1
12.03.2011, 23:48 #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();
}
1
Mirzo
3 / 3 / 0
Регистрация: 05.11.2010
Сообщений: 6
13.03.2011, 00:01  [ТС] #3
А можно сделать с двумя циклами но по проще!
Чтоб понятнее было
0
easybudda
Модератор
Эксперт CЭксперт С++
10054 / 5974 / 1493
Регистрация: 25.07.2009
Сообщений: 11,321
13.03.2011, 00:55 #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;
        }
    }
...
2
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
13.03.2011, 11:02 #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);
}
2
13.03.2011, 11:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2011, 11:02

Каждую серию элементов в массиве увеличить на 1 элемент
Такая задача на С++. В каждую серию элементов добавить еще один такой же...

Каждую группу символов one заменить на three
Каждую группу символов one заменить на three. Попробовал написать, пока что...

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


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

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

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