Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2011, 20:28   #1
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
По умолчанию Задача на бинарный поиск!

Как можно найти бинарным поиском такой X что функция sum( Pi * |Xi - X|) (функция сумм от этих элементов) будет минимальным ,где Pi и Xi вводятся пользователем
Ввод

Первая строка ввода содержит размер N (0 < N < 101)
Следующие N строк содержат Pi и Xi разделенные пробелом
P (0 < P < 1001) и X (0 < X < 101).
Вывод
Действительное число X

Sample Input
Код:
3
1 10
1 20
1 30
Sample Output
Код:
20.000

Само задание здесь http://olymp.krsu.edu.kg/GeneralProb...15&format=html

Последний раз редактировалось videolord; 06.04.2011 в 21:05.
videolord вне форума Ответить с цитированием
Старый 06.04.2011, 20:32   #2
videolord
Пользователь
 
Аватар для videolord
 
Регистрация: 23.02.2011
Сообщений: 28
По умолчанию

можете алгоритм решения подсказать!?
videolord вне форума Ответить с цитированием
Старый 07.04.2011, 15:38   #3
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Алгоритм в смысле бинарный поиск ? По идее задача не сложная надо только догадаться на каком отрезке эта функция возрастает, а на каком убывает, а это уже математика...
ololo-schoolboy вне форума Ответить с цитированием
Старый 15.04.2011, 00:03   #4
-= GREEN =-
Новичок
Джуниор
 
Регистрация: 10.04.2011
Сообщений: 1
По умолчанию

Вот код бинарного поиска для уравненния 30- sqrt(p) - ln(p+7) = 0 на отрезку [0;1000] с точностью до 0.0000000001
Код:
package Binary_fission;

public class MAIN {
	public static void main(String[]s){
		double a=0,b=1000,c;
		while(f(a)*f(b)<0){
			c=(a+b)/2;
			if(f(a)*f(c)>0){
				a=c;
			}else{b=c;};
			if(Math.abs(f(c))<=0.0000000001){System.out.println(c);return;}
		}
	}
	static double f(double x){
		double a=30-Math.sqrt(x)-Math.log(x+7);
		return a;
	}
}
-= GREEN =- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бинарный поиск Виктория7777 Помощь студентам 6 13.01.2011 16:07
Бинарный поиск CraZZZy-GameRRR Общие вопросы Delphi 8 25.05.2010 14:57
Бинарный поиск 0IceCube0 Паскаль, Turbo Pascal, PascalABC.NET 1 13.04.2010 15:52
Бинарный поиск Gendalf Помощь студентам 1 07.07.2007 22:09