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

Значение элемента массива, ближайшее к X

11.09.2020, 19:16. Показов 3248. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте товарищи.Снова прошу у вас помощи.Уже руки опускаются, хочу научиться программировать но боюсь что это не мое..(
Пытаюсь решить задачку, но хоть убейте не пойму алгоритм.
условие задачки - В выходной файл OUTPUT.TXT выведите значение элемента массива, ближайшее к X. Если таких значений несколько, следует вывести наименьшее среди них.
Тоесть число искомое которое как число Х в массиве я нахожу, а вот ближайшее к Х не могу сообразить с алгоритмом.

похоже у меня все ужасно в коде...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("ENTER SIZE MASSIVE - ");
        int N = in.nextInt();
        int[] mass = new int[N];
        for (int i = 0; i < mass.length; i++) {
            System.out.print("Enter number in massive - ");
            int a = in.nextInt();
            mass[i] = a;
        }
        int temp = 0; //В этой переменной будет хранить значение ближайшего числа
        System.out.print("Enter number - ");
        int X = in.nextInt();
        for (int i = 0; i < mass.length; i++) {
            if (X == mass[i]) {
                System.out.println(mass[i]);
            }
        }
    }
}
я так понял есть метод Math.abs или я что-то путаю?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2020, 19:16
Ответы с готовыми решениями:

Вытащить из массива ближайшее значение
Доброго времени суток, уважаемые форумчане! Подскажите, пожалуйста. Имеется массив: double DyArr = { 25, 32, 40, 50, 65, 80, 100,...

Поменять местами значение первого четного элемента массива со значением последнего нечетного элемента массива.
Дан массив С(30). Поменять местами значение первого четного элемента массива со значением последнего нечетного элемента массива. ...

Поменять местами значение первого четного элемента массива со значением последнего нечетного элемента массива
34. Дан массив С(30). Поменять местами значение первого четного элемента массива со значением последнего нечет¬ного элемента массива. ...

12
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
11.09.2020, 21:48
Цитата Сообщение от COMEDY4445 Посмотреть сообщение
а вот ближайшее к Х не могу сообразить с алгоритмом.
ближайшим наверное будет то число, расстояние (разницу) до которого стремится к нулю.
Цитата Сообщение от COMEDY4445 Посмотреть сообщение
я так понял есть метод Math.abs или я что-то путаю?
есть, находите разницу между данным числом и каждым числом с массива, и поскольку разница может быть отрицательной, применяете например Math.abs к каждому и находите минимальное. Оно и будет результатом.
0
1 / 1 / 0
Регистрация: 10.09.2020
Сообщений: 79
12.09.2020, 10:59  [ТС]
Цитата Сообщение от ViktorFX Посмотреть сообщение
ближайшим наверное будет то число, расстояние (разницу) до которого стремится к нулю.
Значит код я правильно написал, осталось дописать алгоритм по нахождению ближайшего числа?

Добавлено через 1 час 32 минуты
Цитата Сообщение от ViktorFX Посмотреть сообщение
ближайшим наверное будет то число, расстояние (разницу) до которого стремится к нулю.
не понимаю я вас...сложно у меня с алгоритмани..как реализовать разницу которая стремится к нулю.
пытаюсь так, не проходит..
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int temp = 0; //В этой переменной будет хранить значение ближайшего числа
        System.out.print("Enter number - ");
        int X = in.nextInt();
        for (int i = 0; i < mass.length; i++) {
            if (X == mass[i]) {
                System.out.println(mass[i]);
            }
            if (X % mass[i] == 0) {
                temp = mass[i];
 
            }
        }
        System.out.println(temp);
    }
}
так я похоже можно найти только положительный\отрицательный элемент массива.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.09.2020, 12:56
COMEDY4445, заведи ещё один массив, в него сохраняй разность между числом и каждым элементом массива. Далее пройди по этому массиву и найди минимальное число.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
12.09.2020, 13:53
COMEDY4445, типа такого..
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
public class FindNearInArr{
 
    public static void main(String[] args){
        double[] arr = {1.2, 3.6, 4,3, 3, 2.35, 0, -2.95, -3.05, -1.75, -4.7};
        double x1 = 3.1, x2 = 3.3, x3 = 3.33, x4 = -3, x5 = -2.99;
        System.out.println(" near x1 : "+find(x1,arr));
        System.out.println(" near x2 : "+find(x2,arr));
        System.out.println(" near x3 : "+find(x3,arr));
        System.out.println(" near x4 : "+find(x4,arr));
        System.out.println(" near x5 : "+find(x5,arr));
    }
    public static double find(double x, double[] arr) {
        double min =Math.abs(arr[0]-x);
        int index =0;
        for(int i=1; i<arr.length; i++) {
            if(Math.abs(arr[i]-x) < min) {
                min = Math.abs(arr[i]-x);
                index = i;
            }
            index = (Math.abs(arr[i]-x) == min && arr[i] < arr[index])? i : index;
        }
        return arr[index];
    }
}
Code
1
2
3
4
5
 near x1 : 3.0
 near x2 : 3.0
 near x3 : 3.6
 near x4 : -3.05
 near x5 : -2.95
0
1 / 1 / 0
Регистрация: 10.09.2020
Сообщений: 79
13.09.2020, 19:23  [ТС]
Вроде правильно реализовал, а опять какой-то касяк(

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 class Solution {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in); //
        System.out.print("Введите размер массива - "); //ENTER SIZE MASSIVE
        int N = in.nextInt(); //Вводим число с клавы
        int[] mass = new int[N]; //Создаем массив на N эллементов
        for (int i = 0; i < mass.length; i++) { //проходим по циклу
            System.out.print("Введите число в массив - "); //Enter number in massive
            int a = in.nextInt(); //Вводим число с клавы
            mass[i] = a; //добавляем число в массив
        }
        int min = 0; //В этой переменной будет хранить значение минимального числа
        int temp = 0; //В этой перемнной будет хранится эл.массива равный числу Х
        System.out.print("Введите число - "); //Enter number
        int X = in.nextInt(); //Вводим число с клавы которое надо найти
        for (int i = 0; i < mass.length; i++) { //проходим по циклу
            if (mass[i] - X < min) { //если эл.масс(mass[i)) - число(Х) меньше переменной min, то
                min = mass[i]; //переменная min = эл.масс(mass[i))
            }
            if (mass[i] == X) { //если эл.масс равен числу Х, то
                temp = mass[i]; //переменная temp = эл.масс(mass[i))
                System.out.print(temp); //Выводим на экран переменную temp
                break;
            }
        }
        System.out.println(min); //Выводим на экран переменную min
    }
}
Java
1
2
3
4
5
6
7
8
ведите размер массива - 5
Введите число в массив - 1
Введите число в массив - 2
Введите число в массив - 3
Введите число в массив - 4
Введите число в массив - 5
Введите число - 3
33
Почему выводится так 33?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.09.2020, 21:03
потому что включи отладчик и посмотри
0
1 / 1 / 0
Регистрация: 10.09.2020
Сообщений: 79
13.09.2020, 22:42  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
потому что включи отладчик и посмотри
теперь надо смотреть видео урок по дебагеру)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
14.09.2020, 02:05
Тут тема закреплена про отладчик
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.09.2020, 09:22
https://www.cyberforum.ru/java/thread2250765.html
0
 Аватар для Aviz__
2758 / 2065 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
14.09.2020, 13:51
COMEDY4445,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Helper {
 
    public static void main(String[] args) {
        double[] arr = {1.2, -3, 3.2, 3, 2.35, 0, 4.3, 3, 2.15, 0, -2.95, -3.05, -1.75, -4.7};
        printNearestVal(arr, 3.1);
        printNearestVal(arr, -2.02);
    }
 
    private static void printNearestVal(double[] arr, double aNum) {
        double minDistAllArr = Double.MAX_VALUE;
        double minDistLocal;
        for (double arElem : arr) {
            minDistLocal = Math.max(arElem - aNum, aNum - arElem);
            if (minDistAllArr > minDistLocal)
                minDistAllArr = minDistLocal;
        }
        for (double arElem : arr) {
            minDistLocal = Math.max(arElem - aNum, aNum - arElem);
            if (minDistAllArr == minDistLocal)
                System.out.println(arElem);
        }
    }
}
0
 Аватар для InvalidCode
295 / 471 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
14.09.2020, 13:55
Цитата Сообщение от COMEDY4445 Посмотреть сообщение
System.out.print
не переводит вівод на новую строку
Цитата Сообщение от COMEDY4445 Посмотреть сообщение
System.out.println
сначала печатает значение а потом переводит на новую строку, во ми и имеем: 3, без перевода, потом еще раз 3, и только после єтого новая строка. добавь ln к вивыду в строке 22, и тебе будет счастье
0
1 / 1 / 0
Регистрация: 10.09.2020
Сообщений: 79
14.09.2020, 17:48  [ТС]
А как сделать так что бы, если число одинаковое с числом Х то, выводится на экран только число одинаковое с Х а второй цикл if не срабатывал, либо на оборот.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < mass.length; i++) { //проходим по циклу
            if (mass[i] - X < min) { //если эл.масс(mass[i)) - число(Х) меньше переменной min, то
                min = mass[i]; //переменная min = эл.масс(mass[i))
            }
            if (mass[i] == X) { //если эл.масс равен числу Х, то
                temp = mass[i]; //переменная temp = эл.масс(mass[i))
                System.out.print(temp); //Выводим на экран переменную temp
                break;
            }
        }
        System.out.println(min); //Выводим на экран переменную min
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.09.2020, 17:48
Помогаю со студенческими работами здесь

Найти значение 3-го по величине элемента и значение всех элементов массива, которые его превышают, заменить на найденное значение
Работа с массивами:

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

Вставить после максимального элемента массива значение минимального элемента
2. Дан массив А размером N.Вставить после максимального элемента значение минимального элемента.

Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)?
Получить индекс элемента одномерного массива, если известно значение элемента (без цикла)? То есть у меня есть заполненый массив. Есть...

Каждому элементу массива, значение которого четное, присваивается значение первого элемента
Помогите написать программу... С клавиатуры вводится массив(его размер и значение элементов заводит пользователь) , каждому элементу...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru