Помогите с задачей на Си (можно Basic)

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Помогите с задачей на Си (можно Basic)

Re: Помогите с задачей на Си (можно Basic)

BBB » 19 дек 2007, 10:04

Не забудь, что массивы в C считаются от 0, а не от 1. Т.е. элементы массива длиной N имеют индексы от 0 до (N-1)

Код: Выделить всё

const int N = 100;  // Например, 100
int X [N];
int iLoop, iLoop2;
int iCurrIdx;
int iTmp;

iCurrIdx = 0;
for (iLoop = 0; iLoop < N; iLoop++) {
  if (X [iLoop] >= 0) {  // число неотрицательное?
    // Сдвигаем уже "пройденные" отрицательные элементы, чтобы не нарушать
    // их изначальный порядок
     iTmp = X [iLoop];
     for (iLoop2 = iLoop; iLoop2 > iCurrIdx; iLoop2--) {
        X [iLoop2] = X [iLoop2 - 1];
     };    
     X [iCurrIdx] = iTmp;
     iCurrIdx++;
  };
};
Вот как-то так. Поскольку числа - либо неотрицательные, либо отрицательные (третьего не дано), то после вынесение в начало всех неотрицательных элементов, все отрицательные автоматически окажутся после них.

Помогите с задачей на Си (можно Basic)

TMF » 18 дек 2007, 21:50

Дан массив: {Xi}, i=1...n. Перестроить его по правилу: расположить сначала все неотрицательные элементы, затем все отрицательные в ппорядке их следования в исходном массиве. Вспомогательный массив не использовать.
За решение буду очень признателен))

Вернуться к началу