Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Java] Соседние элементы массива


Автор: Merhaba 23.5.2011, 22:06
Добрый Вечер!!!
Помогите Пожалуйста дорешать задачу:
Дан массив длины n, состоящий из нулей и единиц. Преобразовать его по следующему правилу. В том случае, если соседи некоторого элемента слева и справа одинаковы, поменять значение элемента на "противоположное" (был ноль - на единицу, была единица - на ноль). Соседний справа для последнего  элемента - первый элемент. Соседний слева для первого элемента - последний элемент. 
Мой код:
Код

void ChangeElements() {
int i;
int N; 
for (i = 1; i <= N; i++){
if ((array[i-1]==array[i+1])&&(array[i]=0)){array[i]=1;}
if ((array[i-1]==array[i+1])&&(array[i]=1)){array[i]=0;}
if ((array[1]==array[N-1])&&(array[N]=1)&&(i=N){array[N]=0;}
if ((array[1]==array[N-1])&&(array[N]=0)&&(i=N){array[N]=1;}
if ((array[2]==array[N])&&(array[1]=0)&&(i=0){array[1]=1;}
if ((array[2]==array[N])&&(array[1]=1)&&(i=0){array[1]=0;}
}

Помогите Пожалуйста переделать код!




Автор: Silent 23.5.2011, 22:16
нафиг извращаться и писать непонятный код, просто воспользуйся вспомогательным массивом:
Код

void ChangeElements()
{
    int [] tmp = new int[N+1];
    for (int i = 1; i < N; i++)
        tmp[i] = (array[i-1] == array[i+1]) ? (1-array[i]) : array[i];
    tmp[0] = (array[N] == array[1]) ? (1-array[0]) : array[0];
    tmp[N] = (array[N-1] == array[0]) ? (1-array[N]) : array[N];
    array = tmp;
}

Автор: Merhaba 23.5.2011, 22:44
Silent, 
Спасибо Вам Большое за помощь!!! smile 
Если Вас не затруднит, объясните Пожалуйста зачем был введён дополнительный массив и если это возможно, то перепишите Пожалуйста код без тернарного оператора

Автор: Silent 24.5.2011, 08:55
дополнительный массив здесь для вот такой штуки: поскольку мы должны изменять значения массива, которые потом будут (старое значение) использоваться для изменения других элементов, то либо необходимо где-то сохранять в дополнительной переменной, либо просто "на новом месте". Просто попробуй вручную "выполнить" алгоритм без дополнительных переменных - и поймешь, что таким способом проще.
Код без тернарного оператора
Код

void ChangeElements()
{
    int [] tmp = new int[N+1];
    for (int i = 1; i < N; i++)
        if (array[i-1] == array[i+1]) tmp[i] = 1-array[i];
        else tmp = array[i];
    if (array[N] == array[1]) tmp[0] = 1-array[0]);
    else tmp[0] = array[0];
    if (array[N-1] == array[0]) tmp[N] = 1-array[N];
    else tmp[N] = array[N];
    array = tmp;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)