Алгоритм перестановки элементов - C (СИ)

Формулировка задачи:

Здравствуйте. Кто нибудь подскажите алгоритм перестановки элементов таким образом: дан вектор исходный: 7894136 выходной: 6578941 перестановка производиться таким образом, что элемент в четной ячейке переходит в следующую четную,последняя четная в первую четную, а первая нечетная в сл неченую, п последняя нечетная в первую.

Код к задаче: «Алгоритм перестановки элементов - C (СИ)»

textual
#include <stdbool.h>
#include <stdio.h>
 
// Является ли данный индекс нечетным?
 
bool is_odd(int idx)
{
    return idx & 1;
}
 
// Следующая нечетная ячейка
 
int next_odd_index(int idx, const size_t siz)
{
    idx += 2;
    if( idx >= siz ) idx = 1;
    return idx;
}
 
// Следующая четная ячейка
 
int next_even_index(int idx, const size_t siz)
{
    idx += 2;
    if( idx >= siz ) idx = 0;
    return idx;
}
 
int main (int argc, char* argv[])
{
    const size_t siz = argc - 1;
    if( siz ) {
        int input_vector[siz];
        int output_vector[siz];
        int i = 0;
 
        do {
            input_vector[i] = atoi(argv[++i]);
        } while( i != siz );
 
        for( i = 0; i < siz; ++i ) {
            if( is_odd(i) ) {
                output_vector[ next_odd_index(i, siz) ] = input_vector[i];
            } else {
                output_vector[ next_even_index(i, siz) ] = input_vector[i];
            }
        }
 
        for( i = 0; i < siz; ++i ) {
            printf("output_vector[%d] = %d\n", i, output_vector[i]);
        }
    }
    return 0;
}

6   голосов, оценка 3.833 из 5


СОХРАНИТЬ ССЫЛКУ