2015-12-17 3 views
2

У меня есть отсортированный массив в порядке возрастания. Я должен построить новый массив таким образом, что последний элемент отсортированного массива будет первым элементом нового массива, а первым элементом отсортированного массива будет следующий элемент нового массива и так далее. Для ПРИМЕР-Переупорядочить отсортированный массив

//if a[] is the sorted array. 
a[]={1,2,3,4,5} 

//output- 
//b[] is the new array. 
b[]={5,1,4,2,3} 

Мой подход Использование это- два индекса i и j.

for (int i = 0, j = 0; j< count; i++, j++) 
{ 
    b[j] = a[count - (i + 1)]; 
    b[++j] = a[i]; 
} 

Теперь вопрос в том, как это сделать, используя только один индекс, используя только то есть индекс i из моего примера.

Заранее благодарен!

+0

Это, вероятно, лучше подходит для http://codegolf.stackexchange.com/. –

+1

Основываясь на вашем описании, кажется, что 'b' должен содержать' {5, 1, 2, 3, 4} '. Если это неверно, можете ли вы объяснить, как создается массив? –

+0

@ DietmarKühl: это двусмысленное объяснение (которое я сначала интерпретировал так, как вы), но, похоже, идея состоит в том, чтобы принимать значения из чередующихся концов ввода. –

ответ

4
for (int i = 0; i < count; ++i) 
    b[i] = a[i % 2 ? i/2 : count - i/2 - 1]; 

Пояснение: i % 2 проверяет, является ли индекс b быть установлен вне в нечетном положении 0 на основе: если так занимает от a[i/2], в противном случае он возвращается один и тот же i/2 количество от конца a, который является a[count - 1] , поэтому a[count - i/2 - 1].

Просмотреть пробел here.

+0

Идеальная синхронизация, собирался опубликовать тот же ответ :) – Netwave

+0

Но вопрос гласит, что b предполагается заполнять, беря элементы со сторон 'a' внутрь, а не просто перемещает последний элемент в первое место ... –

+0

@TonyD теперь вы выходите за пределы сразу, когда i = 0. –

3
for (int i = 0; i < count/2; i++) 
{ 
    b[2*i] = a[count - (i + 1)]; 
    b[2 * i + 1] = a[i]; 
} 
if (count % 2) 
{ 
    b[count - 1] = a [count/2]; 
} 
Смежные вопросы