Afişează mesaje
|
Pagini: [1]
|
2
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Probleme Informatica C++
|
: Aprilie 02, 2014, 21:06:21
|
1) #include<iostream> using namespace std ; int v[1005] ; int main() { int n , i , j , l , lmax = 1 , cin >> n ; for ( i = 1 ; i <= n ; ++i ) cin >> v[i] ; for ( i = 1 ; i < n ; ++i ) { if ( v[i] == v[i+1] ) { j = i ; while( v[j] == v[i] && j <= n ) ++j ; l = j - i + 1 ; if ( l > lmax ) lmax = l ; } } cout << lmax ; } La problema a 2 iei un algoritm de sortare pe care il stii si in loc de vectori vei compara suma cifrelor impare ale numerelor(puse intr-un alt vector ) Pentru 2 ar veni ceva de genu for ( i = 1 ; i <= n ; ++i ) { cin >> v[i] ; x=v[i] ; si = 0 ; while(x) {if(x%2==1) si = si + x % 10 ; x = x / 10 ; } s[i] = si ; } do{inter = 0 ; for(i = 1 ; i < n ; ++i ) if ( s[i] > s[i+1] ) { int aux = s[i] ; s[i] = s[i+1] ; s[i+1] = aux ; aux = v[i] ; v[i] = v[i+1] ; v[i+1] = aux ; inter = 1 ; } }while(inter) ; si apoi afisezi vectorul v. La problema 3 trebuie sa fii facut la scoala trecerea dintr-o baza in alta si cifrele care o sa-ti dea la trecere le salvezi intr-un vector La problema 4 ai mai multe variante.. Prima sa iei intr-un vector de frecventa toate nr prime pana la 100 si care contin cifrele nr sa le scrii sau iei toate cifrele nr intr-un vector si generezi toate variantele si apoi daca varianta generata este nr prim de 2 cifre. Din ce-am vazut tu ai cam ratat tot capitolul vectori...
|
|
|
4
|
infoarena - concursuri, probleme, evaluator, articole / Teme / Factorial
|
: Martie 19, 2014, 21:45:28
|
Am clasica problema factorial si imi cere sa scriu functia care returneaza nr de zerouri.Problema e ca imi iese din timp...n<1000.000.000 #include<iostream> using namespace std; int nz(int n) {int nr=0,y,cnt; if(n<4) return nr; else for(int i=5,cnt=1;i<=n;i=i+5,++cnt) {if(cnt%5) ++nr; else {y=i; while(y%5==0) y=y/5,++nr; } } return nr; } Acum ma gandesc exista o metoda sa aflu nr de zerouri fara sa parcurg/sa parcurg in doar cativa pasi? Codul nu l-am scris fix asa...l-am modificat putin.Intrebarea mea este ideea.
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Teme / Răspuns: Secventa
|
: Martie 07, 2014, 16:26:56
|
Mersi de idee.Am rescris problema si intra in timp dar e interesant ca imi pica un test care inainte nu-mi pica.O sa caut sa vad in ce caz pica. #include<iostream> #include<fstream> using namespace std; ifstream f("secvk.in"); ofstream g("secvk.out"); int v[100005],s[100005]; int main() {int n,k,i,st=0,dr=0,s1=0,sfinal=0,s2=0,j=1,var=0; f >> n >> k ; for(i=1;i<=n;++i) f >>v[i]; i=1; sfinal=v[1],st=i,dr=i+k-1; for(i=1;i<=k;++i) s[j]=s[j]+v[i]; if(s[j]>sfinal) sfinal=s[j],st=i,dr=i+k-1,var=1;
++j; for(i=2;i+k-1<=n;++i) {s[j]=s[j-1]+v[i+k-1]-v[i-1];
if(s[j]>sfinal) sfinal=s[j],st=i,dr=i+k-1,var=1; ++j; } if(var) for(i=st;i<=dr;++i) g <<v[i]<<" "; else for(i=st;i<=dr;++i) g <<v[i]<<" ";
f.close(); g.close(); }
EDIT:Pica cand k==n... #include<iostream> #include<fstream> using namespace std; ifstream f("secvk.in"); ofstream g("secvk.out"); int v[100005],s[100005]; int main() {int n,k,i,st=0,dr=0,s1=0,sfinal=0,s2=0,j=1,var=0; f >> n >> k ; for(i=1;i<=n;++i) f >>v[i];
for(i=1;i<=k;++i) s[j]=s[j]+v[i]; if(s[j]>sfinal) sfinal=s[j],st=1,dr=k,var=1;
++j; for(i=2;i+k-1<=n;++i) {s[j]=s[j-1]+v[i+k-1]-v[i-1];
if(s[j]>sfinal) sfinal=s[j],st=i,dr=i+k-1,var=1; ++j; }
for(i=st;i<=dr;++i) g <<v[i]<<" ";
f.close(); g.close(); }
|
|
|
6
|
infoarena - concursuri, probleme, evaluator, articole / Teme / Secventa
|
: Martie 07, 2014, 15:19:23
|
Problema suna in felul urmator: ,,Determinati o secventa de lungime k care are suma elementelor maxima dintr-un sir de n numere naturale".Daca exista 2 secvente de acest gen se va determina cea mai din stanga(prima).N,K si sirul se citesc din fisier.Numerele din fisier vor fi numere naturale,1<=k<=n<=100000. Eu am rezolvat problema in O(N^2): #include<iostream> #include<fstream> using namespace std; ifstream f("secvk.in"); ofstream g("secvk.out"); int v[100005]; int main() {int n,k,i,st,dr,s,sfinal=0,j; f >> n >> k ; for(i=1;i<=n;++i) f >>v[i]; for(i=1;i+k-1<=n;++i) {j=i;s=0; while(j<=i+k-1) {s=s+v[j]; ++j; } if(s>sfinal) {sfinal=s;st=i;dr=j-1;}
} for(i=st;i<=dr;++i) g<<v[i]<<" ";
f.close(); g.close(); }
Intrebarea mea este cum ar fi gandirea pentru o rezolvare mai rapida ?.
|
|
|
7
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Problema secventa
|
: Februarie 18, 2014, 17:54:29
|
M-am chinuit la o problema cu secvente dar nu i-am dat de cap unde e greseala(nu de compilare ci a algoritmului).Sincer cred ca vreun indice e problema da nu-mi dau seama care. Problema este:determinati secventa palindromica de lungime maxima.(la lungimi egale se ia cea mai din stanga).Stiu ca aceasta complexitate e mare dar in enunt n<=1000 deci timpul nu este o problema. #include<fstream> using namespace std; ifstream f("secvpal.in"); ofstream g("secvpal.out"); int v[1005]; int main() {int n,i,stmax,drmax,j,k,l,difmax=0,dif,var,var2=1,var3=1; f >>n; for(i=1;i<=n;++i) f >>v[i]; for(i=1;i<=n&&(n-i)>difmax;++i) {j=n;var3=1;var2=1; while(j>i&&var3) {var2=1; while(v[i]!=v[j]&&var2) {--j; if(j<=i)var2=0; } if(v[i]==v[j]&&var2) { dif=j-i+1;var=1; if(dif%2==0) for(k=i,l=1;l<=dif/2&&var;++k,++l) if(v[k]!=v[j-l+1]) var=0; else { for(k=i,l=1;l<dif/2&&var;++k,++l) if(v[k]!=v[j-l+1]) var=0; if(v[k]!=v[j-l+1]) var=0; }
if(var==1) if(dif>difmax) {stmax=i,drmax=j,difmax=dif,var3=0;}
} --j; } }
g<<stmax<<" "<<drmax;
}
Am reusit singur pana la urma(stiu ca e complexitate mare dar macar a mers.Era ceva problema la acolade..Cine doreste solutia este: #include<iostream> #include<fstream> using namespace std; ifstream f("secvpal.in"); ofstream g("secvpal.out"); int v[1005]; int main() {int n,i,j,k,l,difmax=0,st,dr,var,dif,var2; f >>n; for(i=1;i<=n;++i) f >>v[i]; for(i=1;i<n;++i) {j=n;var2=1; while(j>i&&var2) { while(v[i]!=v[j]&&j>i) --j; if(j>i) if(v[i]==v[j]) {dif=j-i+1;var=1; if(dif%2==0) for(k=i,l=1;l<=dif/2&&var;++l,++k) {if(v[k]!=v[j-l+1]) var=0;
} else for(k=i,l=1;l<dif/2&&var;++k,++l) {if(v[k]!=v[j-l+1]) var=0;
} if(var) if(dif>difmax) st=i,dr=j,difmax=dif,var2=0;
} --j;
}
} g<<st<<" "<<dr; f.close(); g.close(); return 0; }
|
|
|
|