Другие языки программирования и технологии

Excel vba макросы

Задание: нужно написать код с помощью макросов так,чтобы он мог расчитать разложение числа на слагаемые. То есть например для числа 5 будет 6 комбинаций и он должен выдать мне все эти 6 комбинаций. Пожалуйста помогите!
например для числа 5 будет 6 комбинаций
что вы называете комбинацией
напр 1+4 и 4+1 это одна комбинация или разные ?
повторы допускаются :1+1+1+2 ?
можно ли использовать 0: 0+5 ?
Аскар Алмуханов
Аскар Алмуханов
1 190
Лучший ответ
Пётр Клыжко без повторов, только разные комбинации
Аскар Алмуханов
для числа 5 будет 6 комбинаций
1+1+1+1+1
1+1+1+2
1+1+3
1+4
2+3
А 6-ая комбинация какая ?
напиши все 6 комбинаций которые нужно получить макросом
Мурад Алиев
Мурад Алиев
41 336
как-то так.. адаптировано с http://acm.mipt.ru/twiki/bin/view/Curriculum/FIVTLecturesTerm1Lecture6
/*
n - осталось набрать слагаемых на сумму n
k - слагаемые не больше k
i - номер очередного слагаемого

В массиве a, начиная с i-го элемента, перебрать все возможные
варианты разложения числа n на слагаемые, не превосходящие k.
*/
function dec(n, k, i) {
if n < 0
exit function
if n = 0
// Просьба разложить 0 означает, что раскладывать уже нечего и
// и уже нет остаточного значения, котрое нужно разложить.
// Значит в массиве {a[0], a[1], ... a[i-1]} находится некоторое готовое разложение
// исходного числа n = m.
dim j as integer
for j = 0 to i-1
dec=dec & a[j]
next
dec=dec & vbCrLf

else
if n - k >= 0
a[i] = k; // фиксируем i-ое слагаемое
dec(n - k, k, i + 1);
end if

if ( k - 1 > 0)
dec(n, k - 1, i);
end if
end if
end function

sub main() {
dim a()
m=Input("Введите число");
redim a(m)
for i = 0 to i -1
a[i] = 0;
next
msgbox("Варианты суммирования для числа "+cstr(m)+": "+dec(m, m, 0))

end sub
Пётр Клыжко сейчас протестирую
Пётр Клыжко не запускаeтся даже
Нужно обратиться к Биллу Гейтсу.
В РФ никто не пишет на VBA.
Konstantin Nikiforov
Konstantin Nikiforov
904
Пётр Клыжко Требование преподавателя, мне тоже было бы легче сделать это на с++ том же самом, но преподу нужно именно с макросами.
Александр Григорьев Напиши на си, задай вопрос, прикрепи код, знатоки переведут на бэйсик