@greetrays_kap

Как сделать реверс массива по 2 элемента?

Не могу додуматься до реализации реверса массива вида:
arr1 = 1, 2, 3, 4, 5, 6, 7, 8
Реверс
arr2 = 7, 8, 5, 6, 3, 4, 1, 2
То есть реверс идёт по два элемента в обратную сторону. У меня постоянно происходит утечка памяти

#include <stdio.h>

int main (){
    int arr1[8] = {1, 2, 3, 4, 5, 6, 7, 8};
    inr arr2[8], i = 0, j = 8;
    for (i = 0; i < 8; i++, j--){
        arr2[i] = arr1[j - 1];
        arr2[i + 1] = arr1[j];
        printf("%d ", arr2[i]);
    }
return 0;
}
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@pfemidi
Тут могло бы быть краткое описание меня
[pfemidi@pfemidi ~]$ cat foobar.c
#include <stdio.h>

int main () {
    int arr1[8] = {1, 2, 3, 4, 5, 6, 7, 8};
    int arr2[sizeof(arr1) / sizeof(arr1[0])];

    for (size_t i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i += 2)
        printf("%d %d ", arr1[i], arr1[i + 1]);
    printf("\n");

    for (size_t i = 0, j = sizeof(arr1) / sizeof(arr1[0]) - 1; i < sizeof(arr1) / sizeof(arr1[0]); i += 2, j -= 2) {
        arr2[i] = arr1[j - 1];
        arr2[i + 1] = arr1[j];
    }

    for (size_t i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i += 2)
        printf("%d %d ", arr2[i], arr2[i + 1]);
    printf("\n");

    return 0;
}
[pfemidi@pfemidi ~]$ gcc foobar.c -o foobar 
[pfemidi@pfemidi ~]$ ./foobar
1 2 3 4 5 6 7 8 
7 8 5 6 3 4 1 2 
[pfemidi@pfemidi ~]$
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы