Начини за запис на число

deathruns

Registered
Здравейте.Как може примерно на въведено число(примерно 50) да се изведат всичките му начин за запис като сбор от числа(2,5,10,20,50) ?

примерно 50 =
1. 20+20+10
2. 2+2+2+2+2+10+10+20
3. 5+5+5+5+10+10+10+10

и така всички комбинации с тези цифри,от които сумата да им е даденото число(в случая 59)
 
Е всички няма как да стане, то може 49,99999999999 + 0,0000000001
което е просто абсурдно според мен, каква е идеята може ли да споделиш?
 
Hous каза:
Е всички няма как да стане, то може 49,99999999999 + 0,0000000001
което е просто абсурдно според мен, каква е идеята може ли да споделиш?
Може би има предвид тези числа:
deathruns каза:
... от числа(2,5,10,20,50) ?
?
 
Ще споделиш ли решението, интересно ми е да вида, тъй като пробвах и не се получи - поне да вида как е трябвало да стане ? :idea:
 
Колегата сподели кода в групата.Ето го и него (кода е писан на c++)

Код:
 #include <cstdlib>
#include <iostream>
#define MAX_ADDS 10000

using namespace std;
const unsigned gN = 7;
const unsigned given[] = { 2, 5, 10, 20, 50, 100, 200 };

unsigned mp[MAX_ADDS];
int count = 0;
void print(unsigned lenght)
{ 
unsigned i;
for (i = 1; i < lenght; i++) printf("%u + ", mp[i]);
printf("%d\n", mp[lenght]);
}

int devNum(unsigned n, unsigned pos, int & counter)
{ 
unsigned k, p;
for (p = gN; p > 0; p--) {
k = given[p - 1];
if (n > k) {
mp[pos] = k;
if (mp[pos] <= mp[pos - 1]) {
devNum(n - k, pos + 1, counter);
}
} else if (n == k) {
mp[pos] = k;
if (mp[pos] <= mp[pos - 1]) {counter++;/*print(pos);*/}
}
}
}

int main(void) {
int number;
int counter = 0;
int current = 0;
while(cin>>number) {
counter = 0;
mp[current] = number + 1;
devNum(number, 1, counter);
cout<<counter<<" ";
}
system("PAUSE");
return 0;
}
 

Back
Горе