Koliko dobro znate c++?

poruka: 43
|
čitano: 5.548
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
protjeran
offline
RE: Koliko dobro znate c++?
brahle kaže...

Klasicna jednostavna dinamika (rjesenje slozenosti O(N^2)). Definirajmo funkciju f(start, kraj) koja ce, ako je S[start] == S[kraj] ispisati palindrom i pozvati f(start-1, kraj+1). Iz maina pozivamo f(0,0), f(0,1), f(1,1), f(1,2), f(2,2), f(2,3) ... f(n-2, n-1), f(n-1,n-1) itd.

...
 Koliko vidim, ovdje nisi pokrio pod-varijante? Trebalo bi za svaki f(i, ...) proći f(i, n), f(i, n-1).. f(i, 0(tj. n-i)), pa dalje nastaviti isto s f(i+1,...).
Poruka je uređivana zadnji put čet 30.4.2009 12:25 (Tracer).
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

Ovo bi bio kod:

 

 

#include <cstdio>

#include <cstring>

const int MAXN = 1010;

const int NULA = 0;

 

char s[MAXN];

int n, cnt;

 

void solve( int start, int kraj ) {

  if( start < 0 || kraj > n ) return;

  if( s[start] != s[kraj] ) return;

 

  cnt += ( start != kraj );

  solve( start-1, kraj+1 );

}

 

int main( void ) {

  scanf( " %s", s );

  n = strlen( s );

 

  for( int i = 0; i < n; ++i ) {

    solve( i, i ); 

    if( i ) solve( i-1, i );

  }

 

  printf( "%d\n", cnt );

  return NULA;

}

 

Sa štovanjem, brahle!
Poruka je uređivana zadnji put čet 30.4.2009 17:06 (brahle).
17 godina
protjeran
offline
Koliko dobro znate c++?

radi. lijepo. ovo je već treće različito rješenje za ovaj zadatak Osmijeh

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
Koliko dobro znate c++?

Evo nesto rjesivo:

1. napisi program koji u sebi nece sadrzavati ';' a ispisivat ce na ekran "Hello World!".

2. napisi program koji ce bez uporabe aritmetickih operatora, petlji, rekurzije i asemblera dovristi funkciju koja ce zbrojiti 2 broja. funkcija izgleda ovako:

int add( int a, int b ) {
}

 

Sa štovanjem, brahle!
Poruka je uređivana zadnji put čet 30.4.2009 17:38 (brahle).
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

A koja su prva 2? Zanima me da vidim slozenost. :)

Sa štovanjem, brahle!
17 godina
offline
RE: Koliko dobro znate c++?
brahle kaže...

Evo nesto rjesivo:

1. napisi program koji u sebi nece sadrzavati ';' a ispisivat ce na ekran "Hello World!".

#include <iostream>
int main()
{
  if (std::cout << "hello world") {}
}

Za drugi moram malo razmisliti :D

edit: jesu dozvoljeni bitovni logički operatori? a if-ovi?
Poruka je uređivana zadnji put čet 30.4.2009 17:31 (itf4n).
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

Pardon, svi logicki su dopusteni.

Sa štovanjem, brahle!
17 godina
offline
Koliko dobro znate c++?

Ovo je sa rekurzijom, jesam li uopće na tragu? :D

 

int zbroji(int a, int b)
{
    if (!a) return b;
    if (!b) return a;
    int ostaci = (a & b) << 1;
    int xorano = a ^ b;
    if (xorano & ostaci == 0)
        return xorano | ostaci;
    else
        return zbroji(xorano, ostaci);

}

 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

Ako maknes rekurziju, to bi bilo jedno od rjesenja. Inace, rjesenja ima, i to dosta. Osobno sam vidio 6-7. :)

Sa štovanjem, brahle!
17 godina
offline
Koliko dobro znate c++?

Kako ću ju maknuti? Osim kopiranja funkcije 32 puta :D

 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

 

 

UH samo sam dio postao!Sory!Obrisao da ne zbunim.

Private
Poruka je uređivana zadnji put čet 30.4.2009 21:25 (Private).
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

I to je jedan od nacina :)

Sa štovanjem, brahle!
16 godina
neaktivan
offline
RE: Koliko dobro znate c++?

Evo par primjera ,vi ih samo dobro sročite ili ako ima kakvih pravila napišite ih tako da i drugi imaju koristi.Ja dodam malo kasnije pravilia po kojima sam ja
tunačio ,može se naći na net-u ali nije zgoreg i ovdje malo o tome :

 

Odgonetnite:

 

int*(*[])(int);

 

ili

 

int*(*(*)(int))(int);

 

ili

 

const int *(*p)(int),*x[],v(int*);

 

Možete i obrazložiti,vjerujem da bi pomogli i onima koji uče.

Ok...evo za prvi primjer rješenje tj. po pravilima C++-a:

 

int*(*[])(int);

//niz čiji su elementi tipa pokazivač na funkciju koja uzima argumente tipa int i vraća pokazivač na tip int.

 

Ok,vidim da vam se baš i ne rješavju upiti ,evo za recimo treći ,prvi po redu :

const int *(*p)(int);

 

// p je tipa pokazivač na funkciju koja prima argumente tipa int i vraća pokazivač na const int 

 

 

Opće pravilo sa kojeg   mjesta deklaracije treba krenuti treba krenuti :

 

1) Za nizove i funkcije krenuti nadesno ,zatim nalijevo za pokazivače i reference.Kreće se od imena varijable ,objekta,funkcije ,pokazivača.

To mjesto ima jednu uputu kako ga pronaći :(nije pravilo,samo naputak kako)

2) Ime funkcije ili objekta ili mjesta odakle treba krenuti jest to da se nalazi desno od svih znakova * pokazivača(zvjezdice) ,a lijevo od znaka [](niz),i lijevo

od svih zagrada s popisom argumenata funkcije.Zatim krećete po onom prvom pravilu.

Kad to primejnite na prvu deklaraciju možete je ovako napisati :

 

int*(*ime[])(int);
//sad od imena krenite :  ime je niz elemenata pokazivaca na funkciju koja ima argumente tipa int i vraća pokazivac na tip int.
//prvo odredimo ime po pravilu,zatim krenemmo desno i nailazimo na [ otvorena i tražimo zatvorena ] i to je niz elemenata ,krenemo opet desno i nailazimo na ) //zatvorena

//zagrada i idemo lijevo da bismo našli otvorenu ali imamo  tip pokazivač na i to dodamo u rečenicu i otvorena  zgrada(  ,opet nadesno i nailazimo na //(otvorena
//zagrada što je znak da imamo funkciju  i dodajemo funkcija koja ima argumente tipa int krećemo se desno i čitamo argumente i dodjemo na zatvorenu zagradu i onda samo očitamo nalijevo povratni tip,dodamo pokazivač na int.
složili smo dakle :
niz elemenata tip pokazivač na funkcija koja ima argumente tipa int pokazivač na int: iz toga lijepo složimo
cijelu deklaraciju:
da je to niz elemenata tip pokazivača na funkciju koja ima argumente tipa int i vraća pokazivač na int.


 

 

 

...dalje probajte i vi ,ako nije baš jasno ispišem i pravila po kojima sam ja radio i učio,ako ovo nije točno naka se to i dokaže ili ako ima bolji način neka se i pokaže..

 

 

 

Private
Poruka je uređivana zadnji put uto 5.5.2009 12:41 (Private).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice