Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
1

Пары в одномерном массиве

13.03.2012, 00:50. Просмотров 1336. Ответов 17
Метки нет (Все метки)

Составить программу, которая отыскивает среди пар элементов одномерного массива М те, разность между элементами которых есть величина наибольшая для данного массива.
Т.е. нужно сначала найти максимум, а затем через условие проверить, если разность=максимуму, то это пара? так?

Например:
C++
1
if (A[i]-A[i+1]=max) max=max+1
Но мне нужно что бы пары отыскивались по всему массиву, а не только со следующим элементом!
Просьба помочь, с условием!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2012, 00:50
Ответы с готовыми решениями:

Не могу найти ошибку с подсчетом суммы элементов в интервале[a,b] в динамическом одномерном массиве массиве.
#include <iostream> #include <conio.h> #include <stdlib.h> #include <time.h>...

Удалить пары в массиве
Задан размер массива целых чисел и значения его элементов. Удалить пары...

В одномерном массиве, состоящем из вещественных элементов вычислить номер минимального элемента в массиве, сумму элементов массива
В одномерном массиве, состоящем из 10 вещественных элементов вычислить: 1....

Имеются ли в массиве пары взаимно обратных соседних чисел?
Дан одномерный массив x, x,..., x. Определить, имеется ли в нем пары взаимно...

В массиве найти сумму каждой соседней пары элементов
#include <iostream> #include <conio.h> #include <math.h> #include <time.h>...

17
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
13.03.2012, 00:56 2
нет вы не поняли, причем тут максимум среди элементов?
вы берете 2 элемента и ищите разницу между ними по модулю, и находите такие 2 элемента разность между которым больше!!!
0
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
13.03.2012, 01:00  [ТС] 3
Цитата Сообщение от panicwassano Посмотреть сообщение
нет вы не поняли, причем тут максимум среди элементов?
вы берете 2 элемента и ищите разницу между ними по модулю, и находите такие 2 элемента разность между которым больше!!!
panicwassano, Т.е. мне просто нужно найти пару, у которой самая высокая разность среди остальных элементов?
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
13.03.2012, 01:03 4
Цитата Сообщение от XaJlop4ik Посмотреть сообщение
panicwassano, Т.е. мне просто нужно найти пару, у которой самая высокая разность среди остальных элементов?
да! только по модулю ее нужно будет считать
0
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
13.03.2012, 01:05  [ТС] 5
Цитата Сообщение от panicwassano Посмотреть сообщение
да! только по модулю ее нужно будет считать
panicwassano, Спасибо большое за ответ. Не подскажете хоть примерно как это реализовать?
Само условие меня интересует.
0
Medved_XIII
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 12
13.03.2012, 01:27 6
Может,чем сравнивать разницу между парами элементов найти максимальный и минимальный элемент - разница между ними и будет максимальна?
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
13.03.2012, 01:34 7
Цитата Сообщение от Medved_XIII Посмотреть сообщение
Может,чем сравнивать разницу между парами элементов найти максимальный и минимальный элемент - разница между ними и будет максимальна?
наверно =)
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
13.03.2012, 01:41 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#define SIZE 10
int main(){
    int arr[SIZE] = {10,3,5,6,8,2,4,5,6,10};
    int maxd = 0;
    int left = 0;
    int right = 0;
 
    for(int i = 0;i < SIZE;i ++){
 
    if((arr[i - 1] - arr[i]) > maxd){
        maxd = (arr[i -1] - arr[i]);
                      left = arr[i - 1];
                      right = arr[i];
        }
    }
    std::cout << "Left elem "
        << left << "\nRight elem "
        << right <<  "\nMax difference " << maxd << std::endl;
    system("pause");
}
0
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
13.03.2012, 01:42  [ТС] 9
Цитата Сообщение от Medved_XIII Посмотреть сообщение
Может,чем сравнивать разницу между парами элементов найти максимальный и минимальный элемент - разница между ними и будет максимальна?
Вот, точно, так намного проще)
спасибо большое)
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
13.03.2012, 01:47 10
XaJlop4ik, поспешил ,с ответом ,не пройдет все тесты.
0
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
13.03.2012, 01:58  [ТС] 11
Цитата Сообщение от MrCold Посмотреть сообщение
XaJlop4ik, поспешил ,с ответом ,не пройдет все тесты.
какие тесты?
0
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
13.03.2012, 02:03 12
Не сработает
C++
1
int arr[SIZE] = {10,3,5,6,8,2,4,5,6,20};
0
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
13.03.2012, 02:05  [ТС] 13
MrCold, спасибо конечно, но мне сложновато разобраться в вашем коде!
Вот что у меня вышло:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream> 
#include <math.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
using namespace std; 
void main()
{SetConsoleCP(1251); 
SetConsoleOutputCP(1251); 
srand(time(NULL));
        int N;
        cout<<"Введите кол-во элементов в массиве Z[N]:"<<endl;
        cin>>N;
        int *Z = new int [N], i;
        cout<<"Массив Z[N]:"<<endl;
        for (i=0; i<N; ++i)
        {
                Z[i]=rand()%50-20;
                cout<<Z[i]<<" ";
        }
        cout<<endl;
        //Max
        int max=Z[0];
        for (i=0; i<N; i++)
            if (Z[i]>max)max=Z[i];
        cout<<"Max="<<max<<endl;
        //Min
        int min=Z[0];
        for (i=0; i<N; i++)
            if (Z[i]<min)min=Z[i];
        cout<<"Min="<<min<<endl;
        int par;
        par=abs(max-min);
        cout<<"Наибольшая разность между парами = "<<par<<endl;
}
Правильно ли это? Оно-то работает и считает, с этим все в порядке, но вот я не уверен что это подходит под данное мною условие(
0
Миниатюры
Пары в одномерном массиве  
MrCold
861 / 759 / 174
Регистрация: 11.01.2012
Сообщений: 1,942
13.03.2012, 02:05 14
Имел в виду что мой пример не сработает
0
XaJlop4ik
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 70
13.03.2012, 02:24  [ТС] 15
Цитата Сообщение от MrCold Посмотреть сообщение
Имел в виду что мой пример не сработает
А ну ничего ведь страшного, я вставил он работает, но не совсем так как нужно)
Не могли бы Вы, проверить мой код?

Добавлено через 14 минут
т.е. не код(код работает корректно), а соответствие условия задачи, с моим решением?
0
Toshkarik
1150 / 867 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
13.03.2012, 02:30 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
 
/*
 *
 */
int main( int argc, char** argv ) {
    std::srand( std::time( 0 ));
 
    const std::size_t size = 10;
    std::size_t min = 0, max = 0;
    int a[ size ] = { 0 };
 
    for ( std::size_t i = 0; i < size; i++ ) {
    a[ i ] = std::rand() % 100;
        std::cout << a[ i ] << ' ';
    }
 
    std::cout << std::endl;
 
    for ( std::size_t i = 0; i < size; i++ ) {
    if ( a[ i ] < a[ min ] )
        min = i;
 
    if ( a[ i ] > a[ max ] )
        max = i;
    }
 
    std::cout << "The maximum absolute value between the elements a[ " << min << " ] and a[ " << max << " ] = " << std::abs( a[ min ] - a[ max ] ) << std::endl;
 
    return 0;
}
Единственно если в массиве есть отрицательные числа, условие нахождение min и max нужно изменить немного.
0
panicwassano
594 / 562 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
13.03.2012, 06:55 17
За минимум и максимум вначале цикла взять первый элемент массива, а не 0, и тип int соответственно
0
Medved_XIII
0 / 0 / 0
Регистрация: 19.05.2011
Сообщений: 12
13.03.2012, 09:53 18
Попробуй так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cmath>
#define SIZE 10
int main(){
        double arr[SIZE] = {100,103.1,-15.12,6,-8.89,2,1,55,6,10};
        double maxd = 0;
        double left = arr[0];
        double right = arr[1];
 
        for(int i = 0;i < SIZE-1;i ++)
            for(int j=i+1; j<SIZE; j++)
            {
                if( fabs(arr[i] - arr[j]) > maxd)
                {
                    maxd = fabs(arr[i] - arr[j]);
                    left = arr[i];
                    right = arr[j];
                }
        }
        std::cout << "Left elem "
                << left << "\nRight elem "
                << right <<  "\nMax difference " << maxd << std::endl;
        system("pause");
        return 0;
}
0
13.03.2012, 09:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2012, 09:53

Нужно найти в массиве и распечатать пары одинаковых чисел
Нужно найти в массиве и распечатать пары одинаковых чисел при помощи...

В Одномерном массиве
Здравствуйте,учусь в институте на заочном и дали задание в С++, так как с...

О одномерном массиве
Доброго времени суток! Наставте на путь истинный, прошу!)Завтра сдавать, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru