Sunteți pe pagina 1din 7

ALGORITMI ELEMENTARI

1. PRELUCRAREA NUMERELOR NATURALE NENULE <= n


cin>>n;
for (i=1;i<=n;i++)
{
//prelucrarea lui i;
}

2. CITIREA SI PRELUCRAREA A n NUMERE


cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
//prelucrarea lui x;
}

n=5
x=12 3 5 78 18

3. PRELUCRAREA NUMERELOR INTREGI DIN INTERVALUL [a,b] (a<=b)


- crescator
cin>>a>>b;
for (i=a;i<=b;i++)
{
//prelucrarea lui i;
}

- descrescator
cin>>a>>b;
for (i=b;i>=a;i--)
{
//prelucrarea lui i;
}

4. CITIREA SI PRELUCRAREA A n PERECHI DE NUMERE


cin>>n;
for (i=1;i<=n;i++)
{
cin>>x>>y;
//prelucrarea perechii x,y;
}

5. CITIREA A n NUMERE SI PRELUCRAREA PERECHILOR DE NUMERE CONSECUTIV CITITE IN SIR


cin>>n>>x;
for (i=2;i<=n;i++)
{
cin>>y;
//prelucrarea perechii x,y;
x=y;
}
N= 4 12,43,2,9 => (12,43), (43,2),(2,9)

6*********************. PRELUCRAREA DIVIZORILOR UNUI NUMAR


a) PROPRII
cin>>n;
for (d=2;d<=n/2;d++)
if (n%d==0)
// prelucrarea lui d;
b) TOTI DIVIZORII
cin>>n;
for (d=1;d<=n;d++)
if (n%d==0)
// prelucrarea lui d;

7. TESTAREA PROPRIETATII DE NUMAR PRIM


cin>>n;
OK = 1; // pp ca n este numar prim
for (d=2;d<=n/2;d++) //for (d=2;d*d<=n;d++)
if (n%d==0)
OK = 0; //n nu este prim deoarece are cel putin un divizor propriu
if (OK==1 && n>1) // prelucrarea lui n ca numar prim
else // prelucrarea lui n ca numar neprim

8. PRELUCRAREA DIVIZORILOR UNUI NUMAR


a)cin>>n;
for (d=1;d<=n;d++)
if (n%d==0)
// prelucrarea lui d

b)(eficient***)
cin>>n;
for (d=1;d*d<n;d++)
if (n%d==0)
// prelucrarea lui d si a lui n/d;
if (d*d==n)
// prelucrarea lui d (pentru patrate perfecte)

n=24
d=1 2 3 4 5

n=25
d=1 2 3 4 5

9. PRELUCRAREA CIFRELOR UNUI NUMAR


cin>>n;
while (n>0)
{
c=n%10;
n=n/10;
// prelucrarea cifrei c; - ogliditul lui n : o=o*10+c;
- determinarea unui numar x care are cifre din n, in
aceeasi ordine ca in n : x=x+p*c; p=p*10;
}

n=381 38 3 0
o=0 1 18 183
c=1 8 3

x=45 845 2845


c=8 2
p=100 1000

n=8971460 => x=8460


10. CEL MAI MARE DIVIZOR COMUN (A,B!=0)
a) cin>>a>>b;
while (a!=b)
if (a>b)
a=a-b;
else
b=b-a;
cout<<a;

a=15 9 3
b=6 3

a=1000000 999998 999996... 2 =>aprox 500000 pasi


b=2

b) cin>>a>>b;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
cout<<a;

a=15 6 3
b=6 3 0
r=3 0

a=1000000 2
b=2 0
r=0

11. CEL MAI MIC MULTIPLU COMUN (A,B!=0)


b) cin>>a>>b;
ca=a; cb=b;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
m=ca*cb/a; //produsul numerelor initiale div cmmdc

a=2^3*5*7^2
b=2^2*3*7^2
=> m = 2^3 * 3 * 5 * 7^2
m = (2^3*5*7^2)*(2^2*3*7^2)/(2^2*7^2) = ...

12. DETERMINAREA PUTERII LA CARE APARE FACTORUL PRIM d IN DESCOMPUNEREA IN FACTORI


PRIMI A LUI n
p=0;
while (n%d==0)
{
n=n/d;
p++;
}
cout<<p;

n=72 24 8
d=3
p=0 1 2

13. DESCOMPUNEREA IN FACTORI PRIMI


cin>>n;
d=2;
while (n!=1)
{
p=0;
while (n%d==0)
{
n=n/d;
p++;
}
if (p>0)
// prelucrarea lui d si/sau p
d++;
}

48 | 2
24 | 2
12 | 2
6 | 2
3 | 3
1 |

14. CITIREA SI PRELUCRAREA UNUI SIR DE NUMERE CARE SE TERMINA CU VALOAREA 0 CARE NU
FACE PARTE DIN SIR
cin>>x;
while (x!=0)
{
// prelucrarea lui x;
cin>>x;
}

15 12 0

15. DETERMINAREA CELUI MAI MARE NUMAR x<n SI CARE ARE O PROPRIETATE
n=25 => x=23
cin>>n;
x=n;
do
{
x--;
OK <- 1
for (d=2;d<=x/2;d++)
if (x%d==0)
OK <- 0;
}
while (OK==0);
cout<<x;

16. DETERMINAREA CELUI MAI MIC NUMAR x>n SI CARE ARE O PROPRIETATE
n=25 => x=29
cin>>n;
x=n;
do
{
x++;
OK = 1;
for (d=2;d<=x/2;d++)
if (x%d==0)
OK = 0;
}
while (OK==0);
cout<<x;

17. PRIMII n TERMENI FIBONACCI


1 1 2 3 5 8 13 21
cin>>n;
a=1; b=0; // nu fac parte dintre termenii Fibonacci
for (i=1;i<=n;i++)
{
c=a+b;
cout<<c<<' ';
a=b;
b=c;
}

a=1 0 1 1 2
b=0 1 1 2 3
c=1 1 2 3

18. TERMENII FIBONACCI <=x


1 1 2 3 5 8 13
x=20
cin>>x;
a=1; b=0; // nu fac parte dintre termenii Fibonacci
while (a+b<=x)
{
c=a+b;
cout<<c<<' ';
a=b;
b=c;
}

19. TESTAREA EXISTENTEI UNUI ELEMENT CARE ARE O PROPRIETATE SI CARE FACE PARTE
DINTR-O MULTIME

ok=0; // pp ca nu exista niciun element cu proprietatea ceruta


Se parcurg elementele multimii
testarea proprietatii elementului
daca elementul are proprietatea atunci
ok=1
sfarsit daca
sfarsit parcurgere

ok=0;
cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
.......
if (x are proprietatea)
ok=1;
}
20. TEST DACA TOATE ELEMENTELE DINTR-O MULTIME AU O PROPRIETATE

ok=1; // pp toate elementele au proprietatea ceruta


Se parcurg elementele multimii
testarea proprietatii elementului
daca elementul NU are proprietatea atunci
ok=0
sfarsit daca
sfarsit parcurgere

ok=1;
cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
.......
if (x NU are proprietatea)
ok=0;
}

21. a) PRELUCRAREA SECVENTELOR DE ELEMENTE CARE AU O PROPRIETATE (LUNGIMEA CELEI


MAI MARI SECVENTE DE NUMERE PARE CONSECUTIVE CA POZITITE IN SIR)
n=10
x=23 45 6 22 8 5 6 8 0 10 => lmax=4
6 22 8 6 8 0 10

cin>>n;
lmax=0;
l=0;
for (i=1;i<=n;i++)
{
cin>>x;
if (x are proprietatea)
l++;
else
{
if (l>lmax)
lmax=l;
l=0;
}
}
if (l>lmax)
lmax=l; ///prelucrarea ultimei secvente

b) PRELUCRAREA SECVENTELOR DE ELEMENTE CARE AU O PROPRIETATE CE DEPINDE DE


ELEMENTUL PRECEDENT (LUNGIMEA CELEI MAI MARI SECVENTE DE NUMERE CRESCATOARE SI
CONSECUTIVE CA POZITITE IN SIR)

n=9
3 8 5 2 6 8 9 1 2

cin>>n>>x;
l=1; lmax=0;
for (i=2;i<=n;i++)
{
cin>>y;
if (x<=y) l++;
else
{
if (l>lmax) lmax=l;
l=1;
}
x=y;
}
if (l>lmax) lmax=l;

x=3 8 5 2 6 8 9 1
y=8 5 2 6 8 9 1 2
l=1 2 1 1 2 3 4 1 2
lmax=0 2 4

22. Transformare din baza 10 in baza b


cin>>n>>b;
x=0; p=1;
while (n!=0)
{
c=n%b;
x=x+p*c;
p=p*10;
n=n/b;
}
cout<<x;

23. Transformare din baza b in baza 10

cin>>n>>b;
x=0; p=1;
while (n!=0)
{
c=n%10;
x=x+p*c;
p=p*b;
n=n/10;
}
cout<<x;

S-ar putea să vă placă și