| Prethodna tema :: Sljedeća tema   | 
	
	
	
		| Autor/ica | 
		Poruka | 
	
	
		Dick Long Forumaš(ica)
  
  
  Pridružen/a: 10. 05. 2006. (13:50:57) Postovi: (22)16 
Spol:   
Lokacija: Zagreb 
		 | 
		
			
				 Postano: 18:12 ned, 9. 9. 2007    Naslov: Rastav broja na pribrojnike | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Zadan je prirodni broj n. Nadite na koliko se razliˇcitih naˇcina broj n moˇze prikazati kao
 zbroj pribrojnika (koji su, takoder, prirodni brojevi), uz uvjete da u zbroju bude najviˇse
 12 pribrojnika i da je razlika susjednih pribrojnika najviˇse 5. Poredak pribrojnika u zbroju
 nije bitan, tj. moˇzete smatrati da pribrojnici ne padaju (ili ne rastu). Problem rijeˇsite
 rekurzivnom funkcijom. Obavezno napiˇsite kako izgleda poziv te funkcije za zadani n.
 Napomena: Funkcija, uz argument n, smije primati i dodatne argumente. Nije dozvoljeno
 koriˇstenje polja, lista, te globalnih i static varijabli.
 
 
 to je zadatak iz 1. kolokvija...:)
 i ne znam ga rijesit...jel ima koja dobra dusa..:) 
					
					Zadan je prirodni broj n. Nadite na koliko se razliˇcitih naˇcina broj n moˇze prikazati kao
 
zbroj pribrojnika (koji su, takoder, prirodni brojevi), uz uvjete da u zbroju bude najviˇse
 
12 pribrojnika i da je razlika susjednih pribrojnika najviˇse 5. Poredak pribrojnika u zbroju
 
nije bitan, tj. moˇzete smatrati da pribrojnici ne padaju (ili ne rastu). Problem rijeˇsite
 
rekurzivnom funkcijom. Obavezno napiˇsite kako izgleda poziv te funkcije za zadani n.
 
Napomena: Funkcija, uz argument n, smije primati i dodatne argumente. Nije dozvoljeno
 
koriˇstenje polja, lista, te globalnih i static varijabli.
 
 
 
to je zadatak iz 1. kolokvija... 
 
i ne znam ga rijesit...jel ima koja dobra dusa.. 
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		Dick Long Forumaš(ica)
  
  
  Pridružen/a: 10. 05. 2006. (13:50:57) Postovi: (22)16 
Spol:   
Lokacija: Zagreb 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Dick Long Forumaš(ica)
  
  
  Pridružen/a: 10. 05. 2006. (13:50:57) Postovi: (22)16 
Spol:   
Lokacija: Zagreb 
		 | 
		
			
				 Postano: 21:50 ned, 9. 9. 2007    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         #include<stdio.h>
 #include <math.h>
 int f(int n,int k, int z){
 int a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,s1=0,i;
 
 if (n<0) return (0);
 if (n==0) return (1);
 if (k==0) return (0);
 if (z>0) {
 a1=f(n-z,k-1,z);
 if(z>1)a2=f(n-z+1,k-1,z-1);
 if(z>2)a3=f(n-z+2,k-1,z-2);
 if(z>3)a4=f(n-z+3,k-1,z-3);
 if(z>4)a5=f(n-z+4,k-1,z-4);
 if(z>5)a6=f(n-z+5,k-1,z-5);
 return (a1+a2+a3+a4+a5+a6);
 
 }
 
 if (z=-1){
 for(i=1;i<=n;i++){
 s1+=f(n-i,k-1,i);
 
 }
 return s1;
 }
 
 }
 
 int main(){
 
 int n,k;
 scanf("%d",&n);
 
 
 k=f(n,12,-1);
 
 
 printf("%d",k);
 scanf("%%");
 return 0;
 }
 
 
 eto...fino i radi..:)
 vedrane svaka cast...(bivsi asistent iz rp1) 
					
					#include<stdio.h>
 
#include <math.h>
 
int f(int n,int k, int z){
 
int a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,s1=0,i;
 
 
if (n<0) return (0);
 
if (n==0) return (1);
 
if (k==0) return (0);
 
if (z>0) {
 
a1=f(n-z,k-1,z);
 
if(z>1)a2=f(n-z+1,k-1,z-1);
 
if(z>2)a3=f(n-z+2,k-1,z-2);
 
if(z>3)a4=f(n-z+3,k-1,z-3);
 
if(z>4)a5=f(n-z+4,k-1,z-4);
 
if(z>5)a6=f(n-z+5,k-1,z-5);
 
return (a1+a2+a3+a4+a5+a6);
 
 
}
 
 
if (z=-1){
 
for(i=1;i<=n;i++){
 
s1+=f(n-i,k-1,i);
 
 
}
 
return s1;
 
}
 
 
}
 
 
int main(){
 
 
int n,k;
 
scanf("%d",&n);
 
 
 
k=f(n,12,-1);
 
 
 
printf("%d",k);
 
scanf("%%");
 
return 0;
 
}
 
 
 
eto...fino i radi.. 
 
vedrane svaka cast...(bivsi asistent iz rp1)
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		DarkOne™24/7® Forumaš(ica)
  
  
  Pridružen/a: 22. 11. 2004. (05:46:52) Postovi: (A7)16 
Lokacija: zg 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		ekatarina Forumaš(ica)
  
 
  Pridružen/a: 25. 11. 2007. (19:22:50) Postovi: (161)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Nori Forumaš(ica)
  
 
  Pridružen/a: 01. 10. 2006. (18:41:07) Postovi: (E5)16 
Spol:   
 
		 | 
		
			
				 Postano: 10:20 sri, 30. 4. 2008    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Nasa funkcija izgleda ovako:  int f(int n,int k, int z) gdje je n broj koji trebamo rastaviti na max k pribrojnika,a z nam je zadnji pribrojnik koji smo dodali (u postupku ih zapravo oduzimamo, pa gledamo jesmo li dosli do 0). Na samom pocetku, zadnji pribrojnik nam je nedefiniran, pa  ga i postavimo na neku nemogucu vrijednost, npr. -1. U tom prvom krugu, moguci pribrojnici nam mogu biti svi od 1 do n, pa zato i imamo tu petlju  for(i=1;i<=n;i++) s1+=f(n-i,k-1,i); 
 U slucaju da smo vec  oduzeli neki  'potencijalni' pribrojnik, sljedeci pribrojnici nam mogu biti u rangu [z,z-5] (uvjet zadatka). Svaki put kad pozivamo funkciju,mijenjamo argumente funkcije i to tako da n-u oduzmemo potencijalni pribrojnik, k smanjimo za 1 (jer smo upravo dodali jedan pribrojnik), a na 3.mjesto stavimo zadnji pribrojnik koji smo stavili).
 Pocetnu uvjeti rekurzije su: ako smo oduzeli previse (tj. n se ne moze prikazati kao suma tih pribrojnika), to nije dobar nacin, pa rekurzija vraca 0. Ako smo prekoracili broj pribrojnika (to znaci da nam se k spustio na 0), to isto nije dobro, pa rekurzija vraca 0. I ono sto zapravo zelimo, ako je k dobar, i n=0, sto znaci da se moze prikazati kao suma potencijalnih pribrojnika, rekurzija vrati 1.
 
 Jel jasnije?! 
					
					Nasa funkcija izgleda ovako:  int f(int n,int k, int z) gdje je n broj koji trebamo rastaviti na max k pribrojnika,a z nam je zadnji pribrojnik koji smo dodali (u postupku ih zapravo oduzimamo, pa gledamo jesmo li dosli do 0). Na samom pocetku, zadnji pribrojnik nam je nedefiniran, pa  ga i postavimo na neku nemogucu vrijednost, npr. -1. U tom prvom krugu, moguci pribrojnici nam mogu biti svi od 1 do n, pa zato i imamo tu petlju  for(i=1;i⇐n;i++) s1+=f(n-i,k-1,i); 
 
U slucaju da smo vec  oduzeli neki  'potencijalni' pribrojnik, sljedeci pribrojnici nam mogu biti u rangu [z,z-5] (uvjet zadatka). Svaki put kad pozivamo funkciju,mijenjamo argumente funkcije i to tako da n-u oduzmemo potencijalni pribrojnik, k smanjimo za 1 (jer smo upravo dodali jedan pribrojnik), a na 3.mjesto stavimo zadnji pribrojnik koji smo stavili).
 
Pocetnu uvjeti rekurzije su: ako smo oduzeli previse (tj. n se ne moze prikazati kao suma tih pribrojnika), to nije dobar nacin, pa rekurzija vraca 0. Ako smo prekoracili broj pribrojnika (to znaci da nam se k spustio na 0), to isto nije dobro, pa rekurzija vraca 0. I ono sto zapravo zelimo, ako je k dobar, i n=0, sto znaci da se moze prikazati kao suma potencijalnih pribrojnika, rekurzija vrati 1.
 
 
Jel jasnije?!
					
 
  _________________ Meni mama neda da.... Pričam sa dječacima... meni mama neda to-A što?-Jer kaže da je opasno! 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		ekatarina Forumaš(ica)
  
 
  Pridružen/a: 25. 11. 2007. (19:22:50) Postovi: (161)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |