Mesaje privateMesaje private   AutentificareAutentificare 

 
[Tutorial C++]Principiul Lui Dirichlet

 
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului Crackers's Official Supporting Forum : IC++/C#
Subiectul anterior :: Subiectul urmator  
Autor Mesaj

GiovanY
Founder
Founder
GiovanY

Data inscrierii: 05/Sep/2008
Mesaje: 1979

MesajTrimis: 13/12/2008 21:49    Titlul subiectului: [Tutorial C++]Principiul Lui Dirichlet Raspunde cu citat (quote)

Principiul lui Dirichlet
v: 89 54 4 63 96 17 98 6 55 60
s(i)=v[1]+...+v[i]
s:89 143 147 210 306 323 421 427 482 542
exista i a.i. s(i)%n=0 => v[1]+v[2]+...+v[i]
oricare i S(i)%n!=0 x%n=(1,n-1)
=>S(i)%n={1. 2, ..., n-1} i={1, 2, ...,n}
=>exista j,k=(1,n)
pp.j<k a.i. s(j)=s(k)
S(j)%n-r => s(j)n*c+r
=> s(k)-s(j)=n*c1+r-n*c2-r=n(c1-c2)
r: 8 3 7 0 6 3 1 7 2 2
j=3
=>(s(8)-s(3))% n=0
k=8

Exemplu de problema care foloseste principiul lu Dirichelt este urmoatoarea:
Se considera un vector format din n elemente nr intregi pozitive.
Sa se afiseze:
o secventa formata din elemente consecutive pt care suma elementelor
secventei se divide cu n.
Cod:

#include<fstream.h>
#include<conio.h>
int v[100], n, r[100];
void citire()
{
  ifstream f("diri.in");
  f>>n;
  for(int i=1;i<=n;i++)
  f>>v[i];
  r[i]=(r[i-1]+v[i])%n;
}
void afis(int p, int u)
{
  for(int i=p;i<=u;i++)
  cout<<v[i]<<" ";
  cout<<endl;
}
void calcul()
{ int pi, pf;
  pi=pf=0;
  for(int i=1;i<=n;i++)
  if(r[i]==0)
   {afis(1,i);
    if(pf-pi<i-1)
    {pi=1;
     pf=i;
     }
    }
  for(int j=1;j<n;j++)
   for(int k=j+1;k<=n;k++)
    if(r[j]==r[k])
    {afis(j+1,k);
     if(pf-pi<k-j-1)
     {pf=k;
      pi=j+1;
      }
     }
  cout<<"Secventa de lungime maxima este:";
  afis(pi,pf);
 }
void main()
{clrscr();
 citire();
 calcul();
 getch();
}

Ps: Aceasta problema foloseste citire din fisier.
"diri.in"este un fisier creat in c++ unde scrii pe întâia linie n=numar de valori ,iar pe a doua linie valori in numar de n
de exemplu:
Cod:

5
-14 345 64 34 23


Tutorial 100% made by me.
Sus
Vezi profilul utilizatorului Trimite mesaj privat Trimite un mesaj
Afiseaza mesajele pentru a le previzualiza:   
Creaza un subiect nou   Raspunde la subiect    Pagina de start a forumului Crackers's Official Supporting Forum : IC++/C# Ora este GMT + 2 ore
Pagina 1 din 1

 
Mergi direct la:  
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum