Массив поиск максимального и минимального элемента

Ввести одномерный массив X(N) (N<60). Найти максимальный и минимальный элемент, элементы между ними заменить значениями разности.Массив вывести до и после преобразования. вопрос состоит в следующем:почему вместо вывода массива с элементами:

55 50 5 21 11

он выводит вот это:

55 50 5 50 50

почему последние два элемента в массиве он выводит неправильно?
Сам код программы

#include<iostream>
using namespace std;
int main()
{
int razniza;
int n;
cout « "Введите количество элементов в массиве: ";
cin » n;
setlocale(LC_ALL, "Russian");
int X[60];
for (int i = 0; i < n; i++) {
cout « "\nX[" « i « "]=";
cin » X[i];
}
 
cout « endl;
int max = X[0]; int min = X[0];
for (int i = 0; i < n; i++)
{
if (max < X[i]) {
max = X[i];
}
}
 
for (int i = 0; i < n; i++)
{
if (min > X[i]) {
min = X[i];
}
}
//cout « "Минимальный элемент в массиве:" « min«endl;
 
 
//cout « "Максимальный элемент в массиве:" « max«endl;
razniza=max-min;
//cout«"разница между максимальным и минимальным элементом в массиве:"«razniza«endl;
 
for (int i=0; i<n; i++) { //Модификация массива
if ((X[i]<max)&&(X[i]>min)) {
X[i] = razniza;
}
}
cout « "\nИзмененный массив a: "; //Вывод измененного массива
for (int i = 0; i < n; i++) {
cout « " " « X[i];
}
}

Ответы (1 шт):

Автор решения: Harry

Ну, например, так:

void doit(int * X, int n)
{
    auto [m,M] = minmax_element(X,X+n);
    int delta = *M - *m;
    if (m > M) swap(m,M);
    for(++m; m != M; m++) *m = delta;
}

int main(int argc, char * argv[])
{
    int X[] = {55,10,5,21,11};
    doit(X,5);
    for(int i: X) cout << i << " ";
}

См. https://ideone.com/9Conxa

→ Ссылка