
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
|
![]() Новичок ![]() Профиль Группа: Пользователь Сообщений: 4 Пользователь №: 31191 На форуме: Карма: ![]() |
Задача:
В массиве А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 Итак, приступаем к решению: Для начала найдем количество м-элементов в н-массиве с к-заданным количеством элементов. Используем рекурсию и факториал. function factorial($x){ И создаем ф-цию нахождения м-элементов н-массива с к-заданным кол-вом элементов function calculate($n,$k){ Решение не очень красивое, но поэтому и нужна помощь. Тут чувствую тоже рекурсия должна быть, может кто подскажет. Итак, ф-ция возвращает массив, номер элемента которого соответствует количеству м-элементво, а значение элемента - количеству соединений м-элементов. Т.е. при 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-что именно мы ищем(пары, тройки и т.д) function getSum($arg1,$arg2){ Из примера видно, что с каждым $arg1+1 будет увеличиваться вложение for(). Поэтому это не решение, а издевательство какое-то.!!! Может кто-то уже встречался с подобным? ПОмогите разобраться. Спустя 10 минут, 39 секунд (19.01.2012 - 17:37) johniek_comp написал(а): Скажи куда тебе это надо!? И тогда мб помогу Спустя 7 минут, 15 секунд (19.01.2012 - 17:44) sphinks написал(а): Это мне нужно для зачета. Есть желание помочь? Мне бы суть за хвост ухватить. Идея нужна. Спустя 2 часа, 40 минут, 10 секунд (19.01.2012 - 20:24) sphinks написал(а): Нашел решение. Если кому интересно, могу опубликовать. Спустя 17 часов, 54 минуты, 34 секунды (20.01.2012 - 14:19) UnWind написал(а): sphinks Опубликуй конечно ![]() Спустя 8 дней, 5 часов, 2 минуты, 36 секунд (28.01.2012 - 19:21) sphinks написал(а): Итак: Решение рекурсией
на выходе имеем массив а[], в котором индекс массива соответствует соединениям (пара-тройка-четверка), а значение - сумме произведений. Если есть фиксированные значения, отделяем фиксированные значения и не фиксированные. Фиксированные перемножаем между собой, а в ф-цию передаем массив с не фиксированными значениями. И на выходе массив а перемножаем с произведением фиксированных значений. Это сообщение отредактировал sphinks - 19.01.2012 - 19:29 |
![]() |
![]() ![]() ![]() |