Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 013 Parcurgere in latime : Decembrie 27, 2016, 23:10:12
Pt. ultimul care a intrebat: http://www.infoarena.ro/job_detail/1836210
Declararea : ifstream .. nu fstream...
2  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Probleme Informatica C++ : Aprilie 02, 2014, 21:06:21
1)
Cod:
#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
Cod:
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...
3  infoarena - concursuri, probleme, evaluator, articole / Teme / Răspuns: Factorial : Martie 20, 2014, 15:52:35
Am gasit.Functia a devenit:
Cod:
#include<iostream>
#include<cmath>
using namespace std;

int nz(int n)
{int nr=0,i=5,cnt=1;
 while(n/pow(i,cnt)>=1)
      {nr=nr+n/pow(i,cnt);
       ++cnt;
      }
 return nr;
}
Multumesc de ajutor.
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
Cod:
#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.
Cod:
#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...
Cod:
#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):
Cod:
#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.
Cod:
#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:
Cod:
#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;
}
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines