на выходе имеем массив а[], в котором индекс массива соответствует соединениям (пара-тройка-четверка), а значение - сумме произведений.
Если есть фиксированные значения, отделяем фиксированные значения и не фиксированные. Фиксированные перемножаем между собой, а в ф-цию передаем массив с не фиксированными значениями. И на выходе массив а перемножаем с произведением фиксированных значений.
Задача:
В массиве Аn=[A0,A1,A2...An] найти :
1) количество множителей пар, троек, четверок, н-множителей
2) сумму произведений пар, троек, четверок... н-множителей
Усложнение:
3) найти количество множителей пар, троек, четверок при м-количестве заданных элементов, где м<n
4) сумму произведений n-множителей с m-количеством заданных элементов.
Пример:
А5=[a,b,c,d,e] n=5.
1)5-терок = 1 = abcde
4 = 5= abcd, abce,abde,acde, bcde
3=10=abc,abd,abe,acd,ace,ade,bcd,bce,bde,cde
2=10=ab,ac,ad,ae,bc,bd,be,cd,ce,de
2)S5=abcde;
S4=abcd+abce+abde+acde+bcde
S3=abc+abd+abe+acd+ace+ade+bcd+bce+bde+cde
S2=ab+ac+ad+ae+bc+bd+be+cd+ce+de
Усложнение: заданные элементы b,d. Тогда:
1)5-терок = 1 = abcde
4 = 3= abcd,abde, bcde
3=3=abd,bcd,bde
2=1=bd
2)S5=abcde;
S4=abcd+abde+bcde
S3=abd+bcd+bde
S2=bd
Итак, приступаем к решению:
Для начала найдем количество м-элементов в н-массиве с к-заданным количеством элементов. Используем рекурсию и факториал.
Решение не очень красивое, но поэтому и нужна помощь. Тут чувствую тоже рекурсия должна быть, может кто подскажет.
Итак, ф-ция возвращает массив, номер элемента которого соответствует количеству м-элементво, а значение элемента - количеству соединений м-элементов.
Т.е. при n=5, к=0 columns=[5=>1, 4=>5, 3=>10, 2=>10, 1=>5].
А при n=5, к=2 columns=[5=>1, 4=>3, 3=>3, 2=>1]. Единицы опускаются, т.к. условие - минимум 2 элемента.
Дальше- больше.
Нужно найти сумму произведений. И вот тут вопрос: КАК????
Чувствую, рекурсия нужна. Т.к. без рекурсии вообще труба получается. Вот ф-ция нахождения для n=5
Тут $arg2- массив с 5-ю элементами, а $arg1-что именно мы ищем(пары, тройки и т.д)
Из примера видно, что с каждым $arg1+1 будет увеличиваться вложение for(). Поэтому это не решение, а издевательство какое-то.!!!
Может кто-то уже встречался с подобным? ПОмогите разобраться.
Всем участникам огромное спасибо за помощь.
Все вылечил, разобрался со всем.
На счет читабельности проблема скрывалась в другом:
Сервер передавал с перебоями. А т.к. передавался хмл, то деструктор выдавал ошибку. Поборол недуг разглядывая последний символ в ответе.
Спасибо огромнейшее за помощь. Действительно, работает с бесконечным зацикливанием.
Но вот проблемка еще появилась: не могу прочитать сообщение с сервера больше чем 12КВ. Т.е. я ему говорю: socket_read($socket,131072) (128KB), а он читает первые 12 и все ((
Читал инфу по socket_read() -ничего путного не нашел (( Может кто знает как повысить лимит читабельности ? Может кто-то знает, как бороться с этим недугом?
осталось теперь найти способ прослушивать все ответы от сервера. Т.к. информация поступает не переодично. Т.е. запрос на сервер ушел, ответ пришел. Потом через 2-3 минуты еще ответ от сервера. Как эти ответы отловить? Может кто поможет?
Мне бы как-нть зациклить, чтоб ответ читало, пока есть соединение. Пытался зациклить, клинит браузер. Помогите плиз!!!
Помогите разрешить проблему:
в телнете задаю коннект - соединяется с сервером по заданному порту. При отсылке сообщения, получаю ответ.
А как это описать в ПХП?
Задача:
1.Подсоединиться к серверу на указанный порт (соединение ssl приветствуется).
2. Послать сообщение на сервер.
3. Получить ответ.
4. Оставить соединение открытым, т.к. сервер через некоторое (неопределенное время от 1секунды до 10 минут) начинает высылать сообщения.
5. Получить все сообщения, расшифровать.
6. Отправить ответ, что сообщения получены. Всем спасибо.
7. Закрыть соединение.
И дальше начинаются проблемы (( Чтоб не закрывать соединение я не делаю fclose($fp); Но и не получаю ничего (( Есть ли какие-либо идеи, что можно сделать, чтоб решить задачу? Может как-то можно обновлять соединение, когда с сервера отправляются данные?
Как я понял, сокет работает так: Сервер - клиент. На серверной части работает слушатель, который реагирует на запросы клиента. Но как заставить клиента среагировать на передачу данных с сервера?
В голову приходит идея сделать так: