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 dobro znate c++?
- poruka: 43
- |
- čitano: 5.545
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
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;
}
radi. lijepo. ovo je već treće različito rješenje za ovaj zadatak
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 ) {
}
A koja su prva 2? Zanima me da vidim slozenost. :)
Evo nesto rjesivo:
1. napisi program koji u sebi nece sadrzavati ';' a ispisivat ce na ekran "Hello World!".
Pardon, svi logicki su dopusteni.
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);
}
Ako maknes rekurziju, to bi bilo jedno od rjesenja. Inace, rjesenja ima, i to dosta. Osobno sam vidio 6-7. :)
Kako ću ju maknuti? Osim kopiranja funkcije 32 puta :D
UH samo sam dio postao!Sory!Obrisao da ne zbunim.
I to je jedan od nacina :)
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..