Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Problema, cu probleme! : Martie 07, 2014, 09:46:05
Salut. Am o problema pe care nu o pot rezolva  Brick wall, ceva idei? Multumesc!  Smile

Se considera doua tablouri unidimensionale A si B ce contin n respectiv m elemente (n<m). Verificati daca exista in B o secventa de n elemente (situate pe pozitii consecutive), nu neaparat in aceeasi ordine. Daca nu exista afisati 0, altfel afisati primul indice din B de la care se regasesc toate elementele din A.
Exemplu: Pentru n=3, m=7, A=(2,4,1) si B=(3,4,8,4,2,1,9) se va afisa: 4.
2  infoarena - concursuri, probleme, evaluator, articole / Probleme externe / care algoritm este mai performant? : Februarie 27, 2014, 17:28:32
Care dintre acesti doi algoritmi este mai performant?  Think Multumesc.  Very Happy

Problema: Se considera un vector cu n elemente intregi. Sa se elimine cat mai putine elemente de la extremitatiile vectorului astfel incat cele doua valori ramasa la "capete" sa fie consecutive.
Exemplu: Pentru n=9 si vectorul (8,2,4,5,2,5,3,4,6) se va afisa: (2,4,5,2,5,3).

Primul algoritm determina pentru fiecare element din vector pozitia elementului "pereche", adica a elementului cel mai apropriat de ultimul element, cu proprietatea ca valoarea absoluta a diferentei lor este egala cu 1.

#include<iostream>
#include<math.h>
int main() {
int a[100],min,n,i,j,poz1,poz2,x;
cin>>n;
min=n; poz1=0; poz2=-1;
for(i=0;i<n;i++) cin>>a;
for(i=0;i<n;i++) {
  for(j=n-1;j>=i;j--)
    if (abs(a-a[j])==1) x=j,break;
  if(n-x<min) min=n-x, poz1=i, poz2=x;
}
for(i=p1;i<=p2;i++)
  cout<<a<<' ';
return 0;
}

Urmatorul algoritm simuleaza stergerea primului element si verificarea cerintei, stergerea ultimului element si verificarea, stergerea primelor doua elemente, stergerea primului si al ultimului element, stergerea ultimelor doua elemente, stergere primelor trei, primelor doua si al ultimului, primului si al ultimelor doua, ultimelor trei si asa mai departe (neconsiderand faptul ca in urmatorul algoritm mut elementele vectorului si nu ca in precedentul):

#include<iostream>
#include<math.h>
int main()
{
   int a[100],n,i,j,ok=0;
   std::cout<<"Dati numarul de componente al tablouli unidimensional: ",std::cin>>n;
   for(i=0;i<n;i++) std::cout<<"a["<<i+1<<"]=",std::cin>>a;
   for(i=0;i<n-1 && !ok;i++)
      for(j=0;j<i && !ok;j++)
         if(abs(a[i-j]-a[n-1-j])==1)
         {
            n=n-j //sterg ultimele j elemente deoarece am gasit a[i-j] si a[n-j-1] consecutive
                                i=i-j; //voi folosi variabilele i si j pentru a muta elementele pe a[0],a[1],... incepand cu elementul a[i-j]
            for(j=i;j<n;j++) a[j-i]=a[j];
            n-=i; //in final micosrez numarul elementelor cu i care este de fpat i-j de inainte.
                                ok=1; //iar cu variabila ok stabilesc faptul ca nu mai este nevoie sa continui cautarea.
         }
   for(i=0;i<n;i++) std::cout<<a<<" ";
   std::cout<<std::endl;      
   return 0;
}
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines