Пример. Перестановка наоборот (инверсия). Инверсия  (от  английского  inverse  -  обратный  )  -  это  такая  перестановка,  когда  первый элемент становится последним, второй - предпоследним и т.д.

Эта  простая  задача  имеет  один  подводный  камень.  Пусть  размер  массива  N.  Тогда  элемент A[0] надо переставить с A[N-1], A[1] с A[N-2] и т.д. Заметим, что в любом случае сумма индексов переставляемых элементов равна N-1, поэтому хочется сделать цикл от 0 до N-1, в котором  переставить  элементы  A[i]  с  A[N-1-i].  Однако  при  этом  вы  обнаружите,  что массив не изменился. Обратим  внимание,  что  перестановка  затрагивает  одновременно  и  первую,  и  вторую половину  массива.  Поэтому  сначала  все  элементы  будут  переставлены  правильно,  а  затем (когда i > N/2) будут возвращены на свои места. Правильное решение - делать перебор, при котором переменная цикла доходит только до середины массива.

#include <stdio.h>

const N = 10;

void main()

{

int i, A[N], c;

// ввод массива A

for ( i = 0; i < N/2; i ++ )

{

c = A[i];

A[i] = A[N-1-i];

A[N-1-i] = c;

}

printf("\n Результат:\n”);

for ( i = 0; i <N; i ++ )

printf("%d ", A[i]);

}



2009-12-19 • Просмотров [ 4848 ]