gifts2017

Поиск чисел, формирующих нужную сумму в запросе

Опубликовал Denis Bazin (Bazin) в раздел Программирование - Практика программирования

Под впечатлением статьи http://infostart.ru/public/350311/ захотел сделать задачу в запросе

Постановка задачи: Из ряда произвольной последовательности чисел выбрать все комбинации, которые образуют заданную сумму.

 

Пример:

Входные данные 1, 2, 3, 4, 5

Где сумма = 9

 

ВЫБРАТЬ
	ВТ_01.Поле1
ПОМЕСТИТЬ BT_Булево
ИЗ
	(ВЫБРАТЬ
		0 КАК Поле1
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		1) КАК ВТ_01
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	BT_1.Поле1,
	BT_2.Поле1 КАК Поле2,
	BT_3.Поле1 КАК Поле3,
	BT_4.Поле1 КАК Поле4,
	BT_5.Поле1 КАК Поле5
ПОМЕСТИТЬ ВТ_Коэф
ИЗ
	BT_Булево КАК BT_1,
	BT_Булево КАК BT_2,
	BT_Булево КАК BT_3,
	BT_Булево КАК BT_4,
	BT_Булево КАК BT_5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ВТ_Коэф.Поле1 * &Число1 + ВТ_Коэф.Поле2 * &Число2 + ВТ_Коэф.Поле3 * &Число3 + ВТ_Коэф.Поле4 * &Число4 + ВТ_Коэф.Поле5 * &Число5 КАК Результат,
	ВТ_Коэф.Поле1 * &Число1 КАК Число1,
	ВТ_Коэф.Поле2 * &Число2 КАК Число2,
	ВТ_Коэф.Поле3 * &Число3 КАК Число3,
	ВТ_Коэф.Поле4 * &Число4 КАК Число4,
	ВТ_Коэф.Поле5 * &Число5 КАК Число5
ИЗ
	ВТ_Коэф КАК ВТ_Коэф
ГДЕ  ВТ_Коэф.Поле1 * &Число1 + ВТ_Коэф.Поле2 * &Число2 + ВТ_Коэф.Поле3 * &Число3 + ВТ_Коэф.Поле4 * &Число4 + ВТ_Коэф.Поле5 * &Число5 = 9 

Во втором пакете запроса идет декартовое произведение бинарного множества. Тут мы получаем ограничение по количеству входных данных:

для 20 чисел мы получим (2 в степени 20) = 1 048 576 строке

Пробовал для 23 чисел, но уже нужно подождать...

Во вложении - поиск с произвольным количеством входных данных.

Скачать файлы

Наименование Файл Версия Размер
ОбработкаПоискЧиселНаСумму 2
.epf 7,35Kb
28.04.15
2
.epf FindNumber 7,35Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Артур Аюханов (artbear) 29.04.15 13:52
2. Алексей Бакханд (BackHand001) 14.05.15 12:49
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа