как найти максимальную разницу между двумя соседними элементами массива?

89
09 октября 2021, 13:20

Написал код, создал динамический массив , по заданию нужно указать максимальную разность между двумя соседними элементами массива и выделить при выводе эти элементы красным цветом.

Я покрасил только максимальную разность например если у нас есть такие числа: 1 3 2 6 - максимальная разность будет 4. Как мне покрасить два числа где находится это разность, в данном случае 2 и 6 -их и нужно покрасить.

Вот код :

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;

void massiv(int* x, int n)//функция заполнения и изменения 
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
for (int i = 0; i < n; i++)//заполнение массива
{
    *(x+i) = rand() % 10;

    cout << *(x+i) << " ";
}
SetConsoleTextAttribute(hConsole, (WORD)((7 << 4) | 4));
int id = 0; // id - первый элемент пары, дающей максимальную разность
for (int i = 1; i < n - 1; i++)
    if (abs(x[i] - x[i + 1]) > abs(x[id] - x[id + 1]))
    {
        id = i;
    }
cout << endl;
SetConsoleTextAttribute(hConsole, (WORD)((7 << 4) | 4));
cout << abs(x[id + 1] - x[id]);
}
int main()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, (WORD)((7 << 4) | 0));
system("cls");
srand(time(NULL));
int n;
while (!(cin >> n)) //проверка на число
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "NEVERNII VVOD" << endl;
}
if (n <= 0 || n == 1)
{
    cout << "Vvedite zanogo";
    cin >> n;
}
int* x = new int[n]; //динамическая переменная, выделение памяти

massiv(x, n);//вызов функции
cout << "\n";
SetConsoleTextAttribute(hConsole, (WORD)((7 << 4) | 0));
cout << endl;
system("pause");
return 0;
};
Answer 1

Я как понял основная проблема это в алгоритме. Подкрашивать цифры я не умею ;_;

НО я могу предоставить логарифм :3 ВОТ :

int main()
{
    int massiw[] = {2,4,5,6,8,2,6,8,9,7,3,1};
    // вот алгоритм поиска двух ближайших чисел которые привели к самой большой разнице
    int datchik_t1 = 0;  int bigg_chislo = 0;// самая большая разница
     int chislo_1 = 0; // первое число давшее самую большую разницу
     int chislo_2 = 0; // второе число давшее самую большую разницу
    for(int i=0;i<(sizeof(massiw)/sizeof(int));i++){
        printf("  : %d \n", i);
        datchik_t1 = massiw[i]-massiw[i+1];
        if(datchik_t1<0) // меняем знак на противоположный
            datchik_t1 = datchik_t1*(-1);
        if(datchik_t1>bigg_chislo){
            bigg_chislo = datchik_t1;  
            chislo_1 =i;  chislo_2 = i+1;
        }
    }
    printf(" самое большое число : %d \n", bigg_chislo);
    printf(" два числа \"преведших\" к большому числу   : первое число - %d второе число - %d \n", massiw [chislo_1], massiw [chislo_2]);
    printf(" места в массиве занимают :  %d и %d \n", chislo_1+1, chislo_2+1); // плюс один чтоб перевести в "человеческие нормы" комп счититает с нуля 
    return 0;
}

READ ALSO
можно ли получить видео поток окна в windows

можно ли получить видео поток окна в windows

У нас есть какая-то запущенная оконная программаМне нужно получать кадры изображения этого окна, как только они обновляются

85
Слайдер с отступом

Слайдер с отступом

Помогите пожалуйста как сделать слайдер который имеет отступ с одной стороны, при прокрутке первого элемента слайдер уходит на ширину экрана?...

109
Несколько кнопок в форме обратной связи

Несколько кнопок в форме обратной связи

У меня есть форма, в ней одна кнопка отправки и две и несколько полей requiredПроблема в чем: две кнопки не работают, пока не будут заполнены...

100
Автокомплит Vue Js

Автокомплит Vue Js

Добавил автокомплит для поля select, значение v-model="selected" отображается, при загрузке страницы, но в дропдауне нету значений из itemList, как исправить...

92