← Back to topics
Topic

[period]

b
bojan
Da li bi neko mogao da mi ukaze u cemu gresim?Ideja mi je sledeca:za svaki karakter od n-1 do 3(prva dva karaktera su mi '0' i '.'),ja prvo proveravam da li imam niz istih znakova od pocetka (to je zbog situacija kada se broj zavrsava sa recimo...2222222).Taj deo koda mi je u onom if-else-u pre druge for petlje.A u drugoj petlji koja ide od i-1 do 2 proveravam da li su karkteri na i-toj i j-toj poziciji isti,pa ako jesu,onda imam dva slucaja;ako je i=n-1(poslednji karakter obelezim da je na j-toj poziciji broj jednakih karaktera 1,a ako nije proverim da li se na j+1 poziciji uopste bilo jednakih karaktera,pa ako jeste na j-toj poziciji stavim da je broj jednakih, [j+1]+1.Posle samo ispitam da li je broj jednakih karaktera veci od trenutnog maxa.Evo ga kod
...
for (i=2;i<cnt;++i)
countSame[i]=0;
for ( i = cnt-1 ; i >= 3; --i ) {
if (i==cnt-1){
firstSame=0;
firstSameFind=true;
}
else{
if (firstSameFind && n[i]==n[cnt-1])
firstSame++;
else
firstSameFind=false;
}
isFind=false;
for ( j=i-1 ; j>=2; --j )
if (n[ i ]==n[ j ]){
isFind=true;
if (i==cnt-1)
countSame[ j ]=1;
else if (countSame[ j+1]>0)
countSame[ j ] = countSame[j+1]+1;
if (countSame[ j ]>countP || (countSame[j]==countP &&
cnt - countSame[ j ] - j < lengthP)){
countP=countSame[ j ];
pozP=j;
lengthP=cnt-countSame[ j ] - j;
}
}
if (!isFind) break;
}
//ovde odredjujem da li je ipak niz uzastopnih istih na kraju bolji za resenje
if (firstSame>0 && firstSame>=countP){
pozP=cnt-firstSame-1;
lengthP=1;
countP=firstSame;
}
b
bojan
Zaboravio sam da dodam da resenje ispisujem sa(da bi ste lakse shvatili sta sam hteo da kazem sa countP i pozP promenljivama):

cout<<n[0]<<n[1];
for ( i=2; i <cnt-countP ; ++i ){
if (pozP == i )
cout<<"(" ;
cout<<n [ i ];
}

if (countP!=-1) cout<<")";
b
bojan
Zar je moguce da nema niko ideju sta ne valja u mom algoritmu/kodu?Ima li mozda neko makar da mi predlozi svoju ideju,pa da vidim gde gresim?
b
bojan
Otkrio sam problem.Kakva glupa greska;trebao sam da napisem:
if (i==cnt-1)
countSame[j]=1;
else if (countSame[j+1]==cnt-i-1)
countSame[j]=cnt-i;

E sada imam problem sto mi zadatak prolazi za 9 slucajeva,jer se na drugom primeru zaglupi(tj upadne u mrtvu petlju kod citanja ulaznih podataka).Kod za citanje sa std ulaza mi je:

while(cnt<200 && (c=getc(stdin))!='\n')
if ((c>='0' && c<='9') || c==',' || c=='.' || (c>=0 && c<=9)){
n[cnt++]=c;
}

a ako citam ulazne podatke sa

cin.getline(n,200,'\n');
cnt=strlen(n);

prolazi za taj drugi primer,a za sve ostale daje pogresno resenje.A najgluplje mi je sto ne moze da se koristi conio.h.
Kako bi trebao da glasi kod koji cita max 200 karaktera sa std ulaza,bez upotrebe getch()?