переключение двух элементов в массиве - PullRequest
0 голосов
/ 07 февраля 2019

Уровень базовый, так что терпите меня.Есть несколько похожих тем, но мне не повезло.Я пытаюсь найти элемент max в строке, а затем поместить его на место последнего элемента той же строки, а последний элемент на место элемента max, найденного программой.

Итак, у меня есть этот код на C, он должен распечатать исходный массив, выполнить магию, а затем распечатать измененный массив.Он находит элемент max в 1-й строке, помещает его на последнее место в той же строке, но не выполняет переключение - последний элемент не перепрыгивает вместо элементов max.Я знаю, что сделал что-то глупое и простое, но я просто не могу найти, где ошибка.Любая помощь высоко ценится!

int main()
{
int a[3][4]={23,32,45,12,53,75,38,72,14,37,42,82}, i, j, t, l, max=a[1][0];
for(i=0;i<3;i++){
   printf("\n");
   for(j=0;j<4;j++){
       printf("%d ", a[i][j]);
   }
}
for(l=0;l<4;l++){
    if(a[1][l]>max){max=a[1][l];}
}
t=a[1][3];
a[1][3]=max;
max=t;
for(i=0;i<3;i++){
   printf("\n");
   for(j=0;j<4;j++){
       printf("%d ", a[i][j]);
   }
}    


return 0;
}

И вот что она возвращает (исходный массив):

23 32 45 12
53 75 38 72
14 3742 82

(модифицированный массив):

23 32 45 12
53 75 38 75
14 37 42 82

1 Ответ

0 голосов
/ 07 февраля 2019

Вам также необходимо сохранить положение max:

int max_pos = 0; //same as the initial max - a[1][0]
for(l=0;l<4;l++){
    if(a[1][l]>max){max=a[1][l]; max_pos=l;}
}

Затем, когда вы их переключите:

t=a[1][3];
a[1][3]=max;
a[1][max_pos] = t;

Я предполагаю, что вы знаете, что это происходит только для второго ряда.Если вы хотите сделать это для всех строк, вам придется хранить позиции в массиве.

...