Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 34
1

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

28.11.2012, 21:01. Показов 4006. Ответов 16
Метки нет (Все метки)

Дано вещественное число R и массив размера N. Найти два элемента массива, сумма которых наименее близка к данному числу.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2012, 21:01
Ответы с готовыми решениями:

Найти два элемента массива, сумма которых наименее близка к данному числу R
1)Дано вещественное число R и массив размера n. Найти два элемента массива, сумма которых наименее...

Найти два различных элемента массива, сумма которых наиболее близка к числу R
Найти два различных элемента массива, сумма которых наиболее близка к числу R. С соседними все...

Найти два различных элемента массива, сумма которых наиболее близка к числу R
Дано число R и массив размера N. Найти два различных элемента массива, сумма которых наиболее...

Найти два различных элемента массива, сумма которых наиболее близка к числу R
Дано число R и массив размера N. Найти два различных элемента массива, сумма которых наиболее...

16
29 / 28 / 13
Регистрация: 14.11.2011
Сообщений: 154
28.11.2012, 23:26 2
Кто подскажет, как найти сумму всех элементов матрицы?
0
Эксперт С++
4720 / 2541 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.11.2012, 03:13 3
Цитата Сообщение от s-partizan Посмотреть сообщение
Дано вещественное число R и массив размера N. Найти два элемента массива, сумма которых наименее близка к данному числу.
Сортируете массив. Ответом будет: или два первых числа или два последних (одним сравнением это определите).
1
3677 / 2859 / 787
Регистрация: 25.03.2012
Сообщений: 10,486
Записей в блоге: 1
29.11.2012, 03:17 4
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Сортируете массив. Ответом будет: или два первых числа или два последних (одним сравнением это определите).
Вот это подметил! Но справедливости ради стоит отметить, что выходит и сортировать до конца массив не надо, только найти 2 максимальных/2 минимальных элемента.
0
Эксперт С++
4720 / 2541 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.11.2012, 03:20 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Но справедливости ради стоит отметить, что выходит и сортировать до конца массив не надо, только найти 2 максимальных/2 минимальных элемента.
все правильно, можно и не сортировать.
0
29 / 28 / 13
Регистрация: 14.11.2011
Сообщений: 154
29.11.2012, 17:53 6
Объясните пожалуйста логику.Почему именно так?
0
Эксперт С++
4720 / 2541 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
29.11.2012, 19:15 7
Цитата Сообщение от Krugera Посмотреть сообщение
Объясните пожалуйста логику.Почему именно так?
Если спрашиваете, значит еще не поняли, но это так.
Если взять числовую прямую, то максимальный разброс значений суммы двух чисел массива это: сумма двух самых минимальных чисел и сумма двух самых максимальных чисел. Какое бы значение не выбрали R максимально удаленное будет из этих двух значений.
0
29 / 28 / 13
Регистрация: 14.11.2011
Сообщений: 154
30.11.2012, 22:42 8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Если спрашиваете, значит еще не поняли, но это так.
Если взять числовую прямую, то максимальный разброс значений суммы двух чисел массива это: сумма двух самых минимальных чисел и сумма двух самых максимальных чисел. Какое бы значение не выбрали R максимально удаленное будет из этих двух значений.
А если заставить пользователя вводить числовые значения в массив? то уже будет не известен их разброс? как тогда найти максимально приближенное число к R?
Меня пока больше всего интересует как узнать наибольшую сумму каждого элемента между собой?

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

с помощью операции <= (меньше либо равно), я думаю.
а зачем узнавать два самых маленьких элемента?неужели это позволит сплюсавать все элементы массива между собой?
0
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;
0
Эксперт С++
4720 / 2541 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
01.12.2012, 00:14 12
Цитата Сообщение от Krugera Посмотреть сообщение
А если заставить пользователя вводить числовые значения в массив? то уже будет не известен их разброс?
без разницы откуда берутся числа. Еще раз:
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Сортируете массив. Ответом будет: или два первых числа или два последних (одним сравнением это определите).
0
8 / 11 / 0
Регистрация: 17.09.2012
Сообщений: 188
Записей в блоге: 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;
}
0
309 / 232 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
01.12.2012, 09:52 14
__Александр__, в C++ использовать низкоуровневый массив - это не тру. Для этого есть STL-контейнеры типа vector и прочие няшки.
Страуструп сказал
0
29 / 28 / 13
Регистрация: 14.11.2011
Сообщений: 154
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;
Это и есть решение твоего задания?
я немного по другому нашел, правда не сам додумался.
0
0 / 0 / 0
Регистрация: 09.11.2012
Сообщений: 34
01.12.2012, 15:29  [ТС] 16
Цитата Сообщение от Krugera Посмотреть сообщение
Это и есть решение твоего задания?
я немного по другому нашел, правда не сам додумался.
Это не правильное решено, а именно условие вывода
т.к. при вводе разных R иногда выводит не то что нужно
0
309 / 232 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 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;
}
0
01.12.2012, 22:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2012, 22:32

Найти два элемента массива, сумма которых наиболее близка к заданому числу.
Помогите пожалуйста, срочно нужно написать такую программу: задано действительное число R і массив...

Дано вещественное число R и массив вещественных чисел. Найти 2 элементы массива, которые наименее близки к данному числу R
Дано вещественное число R и массив вещественных чисел. Найти 2 элементы массива, которые наименее...

Найти все трехзначные числа, сумма цифр которых равна данному целому числу
Найти все трехзначные числа?сумма цифр которых равна данному целому числу! Ребята побыстрее надо,...

Найти два соседних элемента массива, сумма которых максимальна
Доброго времени суток! Прошу помощи в решении следущих задач, которые впрочем можно решить и на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru