witam wszystkich serdecznie
mam trzy dane
a : 2 grosze
b : 5 groszy
c : 10 groszy
powinnam znalezc algorytm ktory wyswietli wszystkie mozliwe sposoby na otrzymanie 1 zl
za pomoca tych trzech danych np:
1zl = 50 * 2gr
1zl = 45 * 2 + 2 * 5
1zl = 40 * 2 gr + 4 * 5gr
1zl = 35 * 2gr + 6 * 5gr
1zl = 30 * 2gr + 8 * 5gr
1zl = 25 * 2gr + 10 * 5gr
....
ogolem jest 66 sposobow
czy ktos zna algorytm, ktory moglby mi w tym pomoc?
0
3
for(int ile10=0;ile10<=10;ile10++)
for(int ile5=0;5*ile5<=(100-10*ile10);ile5+=2)
{
int ile2 = (100-10*ile10-5*ile5) >> 1;
//wypisz, dodaj do kolekcji,...
}
0
jw. a w przypadku bardziej ogólnym: rekurencja
0
Wg mnie rekurencja w tym przypadku nieopłacalna, zaś for'y jak podał @bogdans da się sprowadzić do:
import java.io.*;
class Ideone
{
static void calc(int[] val,int target)
{
int[] mul=new int[val.length]; // ilości
for(int sum=0,p=0;p<val.length;)
{
mul[0]=(target-sum)/val[0]; // pierwszy - wyliczamy
if(sum+mul[0]*val[0]==target) // trafiliśmy -> wyświetlamy
{
for(int i=0;i<val.length;++i) System.out.print(" "+val[i]+"*"+mul[i]);
System.out.println();
}
for(p=1;p<val.length;++p)
{
if(sum<target)
{
++mul[p];
sum+=val[p];
break;
}
sum-=val[p]*mul[p];
mul[p]=0;
}
}
}
public static void main (String[] args) throws java.lang.Exception
{
int val[]={2,5,10},target=100;
calc(val,target);
}
}
0
dziekuje za pomoc :)
ps "dzek69" jesli masz watpliwosci co do mojej osoby to z checia zamienie kilka slow z jednym z administratorow z forum na skype aby cie uszczesliwic.