Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko zadatka

[es] :: Pascal / Delphi / Kylix :: Pomoc oko zadatka

[ Pregleda: 2855 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Byk
Podgorica

Član broj: 55128
Poruke: 20
*.proxy.cg.yu.



Profil

icon Pomoc oko zadatka11.04.2005. u 11:27 - pre 231 meseci
Znaci zadatak glasi:
Za unijeti broj n kao rezultat program treba da stampa u k redova sve moguce kombinacije sabiraka ciji je zbir taj (unijeti) broj. Npr: Za unijeti broj 4 to bi bilo:
1+3
3+1
2+2
2+1+1
1+1+2
1+1+1+1
-otprilike znam kako bih za 2 sabirka ali za 3,4 ili vise nemam ideju...
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
212.62.58.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Pomoc oko zadatka11.04.2005. u 13:16 - pre 231 meseci
pogledaj na sajtu http://www.theory.csc.uvic.ca/~cos/ imas algoritme za generisanje kombinatornih objekata, konkretno ti trebaju particije prirodnih brojeva, da znas sta da trazis :)
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

Toyo

Član broj: 45193
Poruke: 227
*.kovnet.co.yu.



+1 Profil

icon Re: Pomoc oko zadatka11.04.2005. u 14:11 - pre 231 meseci
Evo ga. Ova procedura pisiniz bi mogla da ima samo 3 reda kada ne bi sve ispisane nizove pamtila, i pri svakom sledecem pozivu proveravala da li je vec isti ispisan na ekran.

Code:

const
  MaxN=100;
type
  niz = array[1..MaxN] of integer;
var
  a: niz;
  pam:array[1..200] of niz;
  poz,i,n:integer;

procedure pisiniz(nz: niz;n:integer);
var
   i,j: integer;
   forma:niz;
   nadjen, isti:boolean;
begin
     for i := n+1 to maxn do
         forma[i]:=0;
     for i := 1 to n do
         forma[i]:=nz[i];
     nadjen := false;
     for i := 1 to poz do
         begin
              isti := true;
              for j := 1 to maxn do
                  isti:=isti and (pam[i,j]=forma[j]);
              nadjen := nadjen or isti;
         end;
     if not nadjen then
        begin
             inc(poz);
             for i := 1 to maxn do
                 pam[poz,i]:=forma[i];
             for i :=1 to n do
                 write(nz[i]);
             writeln;
        end;
end;

procedure razvoj(a: niz; duz:integer);
var
   pa:niz;
   i,j:integer;
begin
     for i:= 1 to duz - 1 do
         begin
              for j := 1 to i-1 do
                  pa[j]:= a[j];
              pa[i]:=a[i]+a[i+1];
              for j:= i+2 to duz do
                  pa[j-1]:=a[j];
              pisiniz(pa, duz-1);
              if (duz > 3) and ((i mod 2)=1) then
                 razvoj(pa,duz-1);
         end;
end;

begin
     write('Unesi n = ');
     readln(n);
     for i := 1 to n do
         a[i]:= 1;
     pisiniz(a,n);
     razvoj(a, n);
     poz:=0;
     readln;
end.
 
Odgovor na temu

--SOULMaTe--
Nemanja Skoric
Novi Sad

Član broj: 1464
Poruke: 173
*.nat-pool.nsad.sbb.co.yu.



Profil

icon Re: Pomoc oko zadatka11.04.2005. u 15:33 - pre 231 meseci
Cek, jel ti mislis na particije broja?

Da li ti je 2 + 1 + 1 razlicito od 1 + 1 + 2 ?
Don’t do drugs, sleep deprivation is better.
 
Odgovor na temu

Byk
Podgorica

Član broj: 55128
Poruke: 20
*.proxy.cg.yu.



Profil

icon Re: Pomoc oko zadatka12.04.2005. u 13:11 - pre 231 meseci
Soulmate je primijetio znaci moja greska u postavci zadatka. Ne radi se kombinacijama sa ponavljanjem vec bez ponavljanja. Znaci program treba da stampa umjesto (za br. 4 na primjer): 2+1+1 i 1+1+2 samo 2+1+1+ ili samo 1+1+2 zavisi kako ko krene da rjesava zadatak. Sinoc sam ipak uspio da napisem program tako sto sam poceo od 1+1+1+1 resenja a onda povecavao za 1 poslednji najmanji i smanjivao zadnji najveci broj pa je sledece rjesenje: 2+1+1+0, zatim: 2+2+0+0 i na kraju: 3+1+0+0. Jedino nisam siguran da li su ove nule greska. Sad ne znam da li je Toyov program na ovom principu jer nemam vremena da ga tumacim (pogledacu ga kuci jer sam sad na fax) ali u svakom slucaju hvala na pomoci.
 
Odgovor na temu

--SOULMaTe--
Nemanja Skoric
Novi Sad

Član broj: 1464
Poruke: 173
*.nat-pool.nsad.sbb.co.yu.



Profil

icon Re: Pomoc oko zadatka12.04.2005. u 14:36 - pre 231 meseci
E onda su particije broja ono sto te bi treba. To je klasicni primer backtracka.
Ovako bi trebao da izgleda kod.

Code:


var
  p:array[1..max] of integer;
  i:integer;

procedure ispisi(pos:integer);
var
  i:integer;
begin
  write(p[1]);
  for i:=2 to pos do write('+',p[i]);
  writeln;
end;

procedure part(pos,n:integer)
var
  i:integer;
begin
  if n = 0 then Ispisi(pos)
  else
  begin
    for i:=p[pos] to n do
    begin
      p[pos+1]:=i;
      part(pos+1,n-i);
    end;
  end;
end;

begin
  for i:=1 to broj do
  begin
    p[1]:=i;
    part(1,broj-i);
  end;
  readln;
end.

Don’t do drugs, sleep deprivation is better.
 
Odgovor na temu

Toyo

Član broj: 45193
Poruke: 227
*.kovnet.co.yu.



+1 Profil

icon Re: Pomoc oko zadatka12.04.2005. u 18:39 - pre 231 meseci
Citat:
Znaci program treba da stampa umjesto (za br. 4 na primjer): 2+1+1 i 1+1+2 samo 2+1+1+ ili samo 1+1+2


Hmm. Pa sam si napisao u 1. posti da treba i 112 i 211. a ja se mucio 3 minuta, prvo da napravim sve moguce varijacije, pa zarim "skresem" nepotrebno ponavljanje.
 
Odgovor na temu

bancika
Branislav Stojkovic

Član broj: 24844
Poruke: 631
212.62.58.*

Sajt: www.diy-fever.com


+1 Profil

icon Re: Pomoc oko zadatka12.04.2005. u 18:56 - pre 231 meseci
to je neefikasno..od n! ti treba relativno malo njih
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
 
Odgovor na temu

Toyo

Član broj: 45193
Poruke: 227
*.kovnet.co.yu.



+1 Profil

icon Re: Pomoc oko zadatka12.04.2005. u 19:06 - pre 231 meseci
Pa da ali je covek tako napisao u 1. postu
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pomoc oko zadatka

[ Pregleda: 2855 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.