Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 23.12.2015
Сообщений: 24

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

31.05.2017, 21:12. Показов 2549. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан массив и число p. Найдите два различных числа в массиве, сумма которых наиболее близка к p.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2017, 21:12
Ответы с готовыми решениями:

Найти два различных числа в массиве, сумма которых наиболее близка к заданному числу
//Дан массив и число "p". Найдите два различных числа в массиве, сумма которых наиболее близка к "p". Проблема в том, что я...

Найдите два различных числа в массиве, сумма которых наиболее близка к p
1.Дан массив и число p. Найдите два различных числа в массиве, сумма которых наиболее близка к p 2. Дан массив из n*m элементов.Найдите...

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

5
25 / 25 / 31
Регистрация: 04.10.2016
Сообщений: 85
02.06.2017, 11:12
попробуй так
Java
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
public static void main(String[] args) {
        int[] array = { 1, 22, 23, 44, 14, 6, -1, 2 };
        int p = 5;
        int indexFirst = -1;
        int indexSecond = -1;
        int sum = Integer.MAX_VALUE;
        int fs = 0;
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                fs = array[i] + array[j];
                if (fs >= p && i != j) {
                    fs = fs - p;
                    if (sum > fs) {
                        sum = fs;
                        indexFirst = array[i];
                        indexSecond = array[j];
                    }
                }else{
                     fs = array[i] + array[j];
                    if(fs <= p && i != j){
                        fs = p - fs;
                        if(sum > fs){
                            sum = fs;
                            indexFirst = array[i];
                            indexSecond = array[j];
                        }
                }
                }
            }
        }
        System.out.println("first number = "+indexFirst + " ,second number" + indexSecond);
 
    }
0
3 / 3 / 0
Регистрация: 26.09.2014
Сообщений: 84
02.06.2017, 14:21
Именно различных числа по значению, или только различных числа по индексу?
Ну в общем если различных по значению, то может так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  double firstValue = Double.MAX_VALUE;
        double secondValue= Double.MAX_VALUE;
        double sum = Double.MAX_VALUE;
        double[] arr = {1, 3.777, 23.85, -4.33, 14, 6, -1, 2};
        for (int i = 0; i < arr.length; i++) {
            for ( int k = 0;k<arr.length;k++) {
                if(arr[k]!=arr[i]) {
                    if(Math.abs(arr[i]+arr[k]-Math.PI)< Math.abs(sum-Math.PI)) {
                        sum = arr[i]+arr[k];
                        firstValue = arr[i];
                        secondValue = arr[k];
                    }
                }
            }
        }
Добавлено через 11 минут
Если под "p" подразумевается какое-то произвольное число, то просто заменить Math.PI на вашу переменную
0
1 / 1 / 2
Регистрация: 19.06.2016
Сообщений: 36
03.06.2017, 23:20
Или вот (наверное, самый примитивный, но простой):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double[] arr = {3, 15, -4, 8.4, Math.PI};
int p = 10;
 
double minDelta = Double.MAX_VALUE;
int firstIndex;
int secondIndex;
for(int i = 0; i < arr.length; i++){
   for(int j = 0; j < arr.length; j++){
      if(arr[i] != arr[j] && arr[i] + arr[j] - p < delta){
         firstIndex = i;
         secondIndex = j;
         delta = arr[i] + arr[j] - p;
      }
   }
}
System.out.println(arr[firstIndex] + " + " + arr[secondIndex]);
Добавлено через 15 секунд
0
3 / 3 / 0
Регистрация: 26.09.2014
Сообщений: 84
04.06.2017, 13:22
Цитата Сообщение от DL33_1 Посмотреть сообщение
Или вот (наверное, самый примитивный, но простой):
Но не рабочий, протестируйте с разными значениями
0
 Аватар для Aviz__
2739 / 2048 / 507
Регистрация: 17.02.2014
Сообщений: 9,467
05.06.2017, 14:26
Решил немного усложнить, а именно выбрать все пары чисел из массива удовлетворяющие условию близости по модулю.
Java
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
 public static void main(String[] args) {
        double [] arr = {1, 22, -21, 44, 14, 6, -1, 2, 6};
        double p = 4;
        double minDelta = Double.MAX_VALUE;
        for(int i = 0; i < arr.length; i++){
            for(int j = i+1; j < arr.length - 1; j++){
                if (arr[i] + arr[j] <= Double.MAX_VALUE) {
                    double delta = Math.abs(arr[i] + arr[j] - p);
                    if(delta <= minDelta)
                        minDelta = delta;
                }
                else {
                    System.out.println("Сумма двух элементов превышает максимально допустим. в double");
                    return;
                }
            }
        }
 
        for(int i = 0; i < arr.length; i++)
            for(int j = i+1; j < arr.length - 1; j++) {
                double delta = Math.abs(arr[i] + arr[j] - p);
                if (delta <= minDelta) {
                    minDelta = delta;
                    System.out.println(arr[i] + " и " + arr[j]);
                }
 
            }
    }
Bash
1
2
1.0 и 2.0
6.0 и -1.0
Добавлено через 18 минут
Простите, господа маленькая ошибочка в индоксе J!
вот так верно:
Java
1
int j = i+1; j < arr.length; j++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.06.2017, 14:26
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru