Форум программистов, компьютерный форум CyberForum.ru

Найти два элемента массива, сумма которых наименее близка к данному числу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
s-partizan
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 34
28.11.2012, 21:01     Найти два элемента массива, сумма которых наименее близка к данному числу #1
Дано вещественное число R и массив размера N. Найти два элемента массива, сумма которых наименее близка к данному числу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 21:01     Найти два элемента массива, сумма которых наименее близка к данному числу
Посмотрите здесь:

C++ Найти два элемента массива, сумма которых наименее близка к данному числу R
C++ вывод всех N значных чисел, сумма цифр которых = данному числу
Дано вещественное число R и массив вещественных чисел. Найти 2 элементы массива, которые наименее близки к данному числу R C++
Найти два соседних элемента массива, сумма которых максимальна C++
Найти два элемента массива, сумма которых наиболее близка к заданому числу. C++
Найти два различных элемента массива, сумма которых наиболее близка к числу R C++
C++ Найти два различных элемента массива, сумма которых наиболее близка к числу R
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Krugera
23 / 23 / 1
Регистрация: 14.11.2011
Сообщений: 112
28.11.2012, 23:26     Найти два элемента массива, сумма которых наименее близка к данному числу #2
Кто подскажет, как найти сумму всех элементов матрицы?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2012, 03:13     Найти два элемента массива, сумма которых наименее близка к данному числу #3
Цитата Сообщение от s-partizan Посмотреть сообщение
Дано вещественное число R и массив размера N. Найти два элемента массива, сумма которых наименее близка к данному числу.
Сортируете массив. Ответом будет: или два первых числа или два последних (одним сравнением это определите).
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,910
Записей в блоге: 1
29.11.2012, 03:17     Найти два элемента массива, сумма которых наименее близка к данному числу #4
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Сортируете массив. Ответом будет: или два первых числа или два последних (одним сравнением это определите).
Вот это подметил! Но справедливости ради стоит отметить, что выходит и сортировать до конца массив не надо, только найти 2 максимальных/2 минимальных элемента.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2012, 03:20     Найти два элемента массива, сумма которых наименее близка к данному числу #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но справедливости ради стоит отметить, что выходит и сортировать до конца массив не надо, только найти 2 максимальных/2 минимальных элемента.
все правильно, можно и не сортировать.
Krugera
23 / 23 / 1
Регистрация: 14.11.2011
Сообщений: 112
29.11.2012, 17:53     Найти два элемента массива, сумма которых наименее близка к данному числу #6
Объясните пожалуйста логику.Почему именно так?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2012, 19:15     Найти два элемента массива, сумма которых наименее близка к данному числу #7
Цитата Сообщение от Krugera Посмотреть сообщение
Объясните пожалуйста логику.Почему именно так?
Если спрашиваете, значит еще не поняли, но это так.
Если взять числовую прямую, то максимальный разброс значений суммы двух чисел массива это: сумма двух самых минимальных чисел и сумма двух самых максимальных чисел. Какое бы значение не выбрали R максимально удаленное будет из этих двух значений.
Krugera
23 / 23 / 1
Регистрация: 14.11.2011
Сообщений: 112
30.11.2012, 22:42     Найти два элемента массива, сумма которых наименее близка к данному числу #8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Если спрашиваете, значит еще не поняли, но это так.
Если взять числовую прямую, то максимальный разброс значений суммы двух чисел массива это: сумма двух самых минимальных чисел и сумма двух самых максимальных чисел. Какое бы значение не выбрали R максимально удаленное будет из этих двух значений.
А если заставить пользователя вводить числовые значения в массив? то уже будет не известен их разброс? как тогда найти максимально приближенное число к R?
Меня пока больше всего интересует как узнать наибольшую сумму каждого элемента между собой?

Добавлено через 56 минут
Я не правильно задал вопрос. Самую большую сумму элементов узнать легко. А вот как узнать сумму всех элементов между собой, а потом еще и сравнить с каким-нибудь числом?
remarkes
300 / 223 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
30.11.2012, 23:36     Найти два элемента массива, сумма которых наименее близка к данному числу #9
тебе надо просто найти два самых маленьких элемента в массиве
Цитата Сообщение от Krugera Посмотреть сообщение
как
с помощью операции <= (меньше либо равно), я думаю.
Krugera
23 / 23 / 1
Регистрация: 14.11.2011
Сообщений: 112
30.11.2012, 23:40     Найти два элемента массива, сумма которых наименее близка к данному числу #10
Цитата Сообщение от remarkes Посмотреть сообщение
тебе надо просто найти два самых маленьких элемента в массиве

с помощью операции <= (меньше либо равно), я думаю.
а зачем узнавать два самых маленьких элемента?неужели это позволит сплюсавать все элементы массива между собой?
s-partizan
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 34
30.11.2012, 23:58  [ТС]     Найти два элемента массива, сумма которых наименее близка к данному числу #11
У меня такой вопрос какое записать условие на вывод этих элементов
Я нашёл сумму 2-ух минимальных и 2-ух максимальных
Всего лишь осталось записать условие какую из этих сумм вывести
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
int R;
   cout<<"Vvedite chislo R= ";
   cin>>R;
   int n;
   cout<<"Zadayte razmer masiva n= ";
   cin>>n;
   int a[n];
   int i;
   cout<<"Zadayte masiv"<<endl;
   for(i=0;i<n;i++)
   {
       cin>>a[i];
   }
   int max=0,mmax=0;
   int maxpos=0,mmaxpos=0;
 
   for(i=0;i<n;i++)
   {
       if(a[i]>max)
       {
           max=a[i];
           maxpos=i+1;
       }
   }
    for(i=0;i<n;i++)
   {
       if(a[i]>mmax&&mmax<max&&a[i]!=max)
       {
           mmax=a[i];
           mmaxpos=i+1;
       }
   }
int min=max,mmin=max;
int minpos=0,mminpos=0;
   for(i=0;i<n;i++)
   {
       if(a[i]<min)
       {
           min=a[i];
           minpos=i+1;
       }
   }
    for(i=0;i<n;i++)
   {
 
       if(a[i]<mmin&&a[i]!=min)
       {
           mmin=a[i];
           mminpos=i+1;
       }
   }
   int summax=max+mmax;
   int summin=mmin+min;
  int e=R+summax;
  int e1=R+summin;
 if(e>e1)
 cout<<"Maksimalno udalionnaya summa elementov "<<mmaxpos<<" and "<< maxpos <<endl;
 else
 cout<<"Maksimalno udalionnaya summa elementov "<< minpos <<" and "<<mminpos<<endl;
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
01.12.2012, 00:14     Найти два элемента массива, сумма которых наименее близка к данному числу #12
Цитата Сообщение от Krugera Посмотреть сообщение
А если заставить пользователя вводить числовые значения в массив? то уже будет не известен их разброс?
без разницы откуда берутся числа. Еще раз:
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Сортируете массив. Ответом будет: или два первых числа или два последних (одним сравнением это определите).
__Александр__
7 / 10 / 0
Регистрация: 17.09.2012
Сообщений: 191
Записей в блоге: 2
01.12.2012, 00:19     Найти два элемента массива, сумма которых наименее близка к данному числу #13
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
36
37
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
    srand(time(NULL));
    int n = 0; 
    int sum = 0;
    cin >> n; // Считываем с клавиатуры n
    int **a = new int* [n]; // Создаем массив указателей
    for (int i = 0; i < n; i++)
    {
        a[i] = new int [n]; // Создаем элементы
    }
    // А дальше работа как с обычным массивом. 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;
            cout << a[i][j] << " "; // Вывести элементы на консольку
            sum+= a[i][j];
        }
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли
    }
 
    cout << "sum =" << sum << endl;
    // Удаление массива
    for (int i = 0; i < n; i++)
    {
        delete[]a[i]; // Удаляем каждый элемент
    }
    delete [] a; // А потом массив
    return 0;
}
remarkes
300 / 223 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
01.12.2012, 09:52     Найти два элемента массива, сумма которых наименее близка к данному числу #14
__Александр__, в C++ использовать низкоуровневый массив - это не тру. Для этого есть STL-контейнеры типа vector и прочие няшки.
Страуструп сказал
Krugera
23 / 23 / 1
Регистрация: 14.11.2011
Сообщений: 112
01.12.2012, 11:59     Найти два элемента массива, сумма которых наименее близка к данному числу #15
Цитата Сообщение от s-partizan Посмотреть сообщение
У меня такой вопрос какое записать условие на вывод этих элементов
Я нашёл сумму 2-ух минимальных и 2-ух максимальных
Всего лишь осталось записать условие какую из этих сумм вывести
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
int R;
   cout<<"Vvedite chislo R= ";
   cin>>R;
   int n;
   cout<<"Zadayte razmer masiva n= ";
   cin>>n;
   int a[n];
   int i;
   cout<<"Zadayte masiv"<<endl;
   for(i=0;i<n;i++)
   {
       cin>>a[i];
   }
   int max=0,mmax=0;
   int maxpos=0,mmaxpos=0;
 
   for(i=0;i<n;i++)
   {
       if(a[i]>max)
       {
           max=a[i];
           maxpos=i+1;
       }
   }
    for(i=0;i<n;i++)
   {
       if(a[i]>mmax&&mmax<max&&a[i]!=max)
       {
           mmax=a[i];
           mmaxpos=i+1;
       }
   }
int min=max,mmin=max;
int minpos=0,mminpos=0;
   for(i=0;i<n;i++)
   {
       if(a[i]<min)
       {
           min=a[i];
           minpos=i+1;
       }
   }
    for(i=0;i<n;i++)
   {
 
       if(a[i]<mmin&&a[i]!=min)
       {
           mmin=a[i];
           mminpos=i+1;
       }
   }
   int summax=max+mmax;
   int summin=mmin+min;
  int e=R+summax;
  int e1=R+summin;
 if(e>e1)
 cout<<"Maksimalno udalionnaya summa elementov "<<mmaxpos<<" and "<< maxpos <<endl;
 else
 cout<<"Maksimalno udalionnaya summa elementov "<< minpos <<" and "<<mminpos<<endl;
Это и есть решение твоего задания?
я немного по другому нашел, правда не сам додумался.
s-partizan
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 34
01.12.2012, 15:29  [ТС]     Найти два элемента массива, сумма которых наименее близка к данному числу #16
Цитата Сообщение от Krugera Посмотреть сообщение
Это и есть решение твоего задания?
я немного по другому нашел, правда не сам додумался.
Это не правильное решено, а именно условие вывода
т.к. при вводе разных R иногда выводит не то что нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 22:32     Найти два элемента массива, сумма которых наименее близка к данному числу
Еще ссылки по теме:

C++ Найти два элемента, стоящих друг за другом, сумма которых больше максимального числа массива
Найти все трехзначные числа, сумма цифр которых равна данному целому числу C++
C++ В массиве Y1, ... , Yn найти два элемента, среднее арифметическое которых равно заданному числу X
C++ В массиве Y1, ... , Yn найти два элемента, среднее арифметическое которых равно заданному числу X
Найти два соседних элемента массива, сумма которых минимальна C++

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

Или воспользуйтесь поиском по форуму:
remarkes
300 / 223 / 13
Регистрация: 01.07.2011
Сообщений: 809
Записей в блоге: 1
01.12.2012, 22:32     Найти два элемента массива, сумма которых наименее близка к данному числу #17
s-partizan, обращаю внимание, что в задании R - вещественное, то есть float/double/long double, а не int

Добавлено через 43 минуты
Вот - вариант с решением. Использован вектор
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/* программа:
 * Дано вещественное число R и массив размера N.
 * Найти два элемента массива,
 * сумма которых наименее близка к данному числу.
 * */
 
/* Наименее близки могут быть либо 2 минимума, либо 2 максимума */
 
#include <iostream>     /* для ввода/вывода */
#include <vector>       /* для создания контейнера типа вектор (наш массив) */
#include <cfloat>       /* максимальные/минимальные значения для типа double */
#include <ctime>        /* для задания случайных чисел */
#include <cstdlib>      /* случайные числа */
 
 
int main(int argc, char **argv) {
    using namespace std;
 
    int         n = 0;      /* размер массива */
    unsigned    min_index,  /* индекс массива с минимальным  значением */
                max_index;  /* индекс массива с максимальным значением */
    double      input,
                r       = DBL_MIN,
                max1    = DBL_MIN,
                max2    = DBL_MIN,
                min1    = DBL_MAX,
                min2    = DBL_MAX;
 
    srand(time(NULL));
 
    cout << "Введи вещественное число R: ";
    cin >> r;
 
    while (n < 4) {
        cout << "Введи размер массива N (не меньше 4): ";
        cin >> n;
    }
 
    vector <double> arr(n);                         /* объявляем наш массив */
    typedef vector <double> :: const_iterator CI;   /* псевдоним на итератор */
 
    for (unsigned i = 0; i < arr.size(); i++) {
        //~ cin >> input;       /* если нужен ввод пользователя */
        input = rand() % 100;
        arr[i] = input;
    }
 
    /* вычисляем минимум и максимум */
    for (unsigned i = 0; i < arr.size(); i++) {
        input = arr[i];
        if (input < min1) {
            min1 = input;
            min_index = i;
        }
        if (input > max1) {
            max1 = input;
            max_index = i;
        }
    }
 
    /* вычисляем подминимум и подмаксимум */
    for (unsigned i = 0; i < arr.size(); i++) {
        input = arr[i];
        if (input < min2 && min2 >= min1 && i != min_index)
            min2 = input;
        if (input > max2 && max2 <= max1 && i != max_index)
            max2 = input;
    }
 
    /* выводим массив-вектор */
    for (CI p = arr.begin(); p != arr.end(); p++) {
        cout << *p << " ";
    }
    cout << endl;
 
    /* выводим минимумы-максимумы */
    cout << "min1: " << min1 << endl;
    cout << "min2: " << min2 << endl;
    cout << "max1: " << max1 << endl;
    cout << "max2: " << max2 << endl;
 
    /* Решение */
    if ( (r - min1 - min2 ) > (max1 + max2 - r) ) {
        cout << "MIN " << min1 + min2 << " дальше к " << r << ", чем " << max1 + max2;
    } else {
        cout << "MAX " << max1 + max2 << " дальше к " << r << ", чем " << min1 + min2;
    }
 
    return 0;
}
Yandex
Объявления
01.12.2012, 22:32     Найти два элемента массива, сумма которых наименее близка к данному числу
Ответ Создать тему
Опции темы

Текущее время: 16:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru