Здравствуйте,тут ошибка или я что то не понимаю
Задание 3. В целочисленном массиве упорядочить по убыванию элементы, стоящие между первым максимальным и последним минимальным элементами
#include <conio.h>
#include <iostream>
using namespace std;
int main() {
int arr[100] = {};
int n = -1;
while (n < 0)
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
int max = arr[0], min = arr[0], sizemax = 0, sizemin = 0;
for (int i = 1; i < n; i++)
{
if (max < arr[i])
{
sizemax = i;
max = arr[i];
}
if (min >= arr[i])
{
sizemin = i;
min = arr[i];
}
}
for (int i = sizemax + 1; i < sizemin; i++)
{
for (int j = sizemin - 1; j > i; --j)
{
if (arr[j] > arr[j - 1])
{
int t = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = t;
}
}
}
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
_getch();
return 0;
}
Например делаю такие тесты 1 тест
Ввожу
2
34
4
5
666
54
656
55
1
6
Программа выводит - 2 34 4 5 666 656 55 54 1 6
Всё правильно, НО
Например, 2 тест
Ввожу
1
434
435
436
437
438
439
440
444
4444
Программа выводит тоже самое - 1 434 435 436 437 438 439 440 444 4444
На 2 тесте программа должна переставить 4444 и 1,а также упорядочить цифры между ними по убыванию. Или я неправильно понимаю задачу?
Ответы (1 шт):
Я понимаю задание так: найти первый максимальный элемент, последний минимальный. Есть 2 точки, неважно - слева минимальный, а справа максимальный или нет. Надо отсортировать всё между этими точками, не включая их.
Я бы делал так:
int main()
{
int arr[100] = {};
int n = -1;
while (n < 0) cin >> n;
int m = 0, M = 0, im = 0, iM = 0;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
if (i == 0)
{
m = M = arr[i];
}
else
{
if (M < arr[i]) { M = arr[i]; iM = i; }
if (m >= arr[i]) { m = arr[i]; im = i; }
}
}
if (im > iM) swap(im,iM);
sort(arr+im+1,arr+iM,greater<int>());
for(int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
}
Вернее, я бы делал с вектором, на раз уж вы хотите массив...
В результате пример 2 дает
1 444 440 439 438 437 436 435 434 4444
Последний минимальный - это первый элемент массива, первый максимальный - последний элемент массива. Все, что между ними (не включая их) сортируем по убыванию...
И еще - не путайте цифры и числа, неудобно ведь...