Jump to content
TEST101

Numarul de numere consecutive in C/C++ ?

Recommended Posts

Dac? vrei s?-?i afi?eze num?rul de numere consecutive f?r? întrerupere, ai urm?toarea func?ie:


int Numarul_De_Numere_Consecutive_Fara_Intrerupere(int v[], int n)
{
for (int i = 0; i < n - 1; i++)
if (v[i] + 1 != v[i + 1])
return i + 1;
return n;
}

?i se folose?te a?a:


#include <iostream>

using namespace std;

int Numarul_De_Numere_Consecutive_Fara_Intrerupere(int v[], int n)
{
for (int i = 0; i < n - 1; i++)
if (v[i] + 1 != v[i + 1])
return i + 1;
return n;
}

int main()
{
int v[100], n;

cout << "n = ", cin >> n;

for (int i = 0; i < n; i++)
cout << "v[" << i << "] = ", cin >> v[i];

[B]cout << Numarul_De_Numere_Consecutive_Fara_Intrerupere(v, n) << endl;[/B]

system("PAUSE");

return 0;
}

Edited by H3xoR
Link to comment
Share on other sites

@SticKyWoX

Am uitat sa precizez, imi cer scuze.

Si anume ca:

1. Numerele nu e neaparat sa fie ordonate crescator sau descrescator, pot fi si aleator (adesea).

2. Daca ii dai: 1,2,3, 23, 24, 25 iti va afisa 3. Daca sunt 3 consecutive si altele 4 consecutive: 1,2,3,4, 23,24,25 iti va afisa 4. Afiseaza numarul cel mai mare de numere consecutive.

3. La 1,2,3,4,5,6,7 va afisa 7 dar si la 1, 2, 3, 5, 6, 7, 4 iti va afisa tot 7. Numerele nu sunt neaparat in ordine crescatoare sau descrescatoare.

Multumesc mult si scuze ca am uitat de asta (asa mi se mai intampla, presupun ca ce stiam eu stiti deja si voi si am omis sa va mai spun, scuze).

Link to comment
Share on other sites

@SticKyWoX

Am uitat sa precizez, imi cer scuze.

Si anume ca:

1. Numerele nu e neaparat sa fie ordonate crescator sau descrescator, pot fi si aleator (adesea).

2. Daca ii dai: 1,2,3, 23, 24, 25 iti va afisa 3. Daca sunt 3 consecutive si altele 4 consecutive: 1,2,3,4, 23,24,25 iti va afisa 4. Afiseaza numarul cel mai mare de numere consecutive.

3. La 1,2,3,4,5,6,7 va afisa 7 dar si la 1, 2, 3, 5, 6, 7, 4 iti va afisa tot 7. Numerele nu sunt neaparat in ordine crescatoare sau descrescatoare.

Multumesc mult si scuze ca am uitat de asta (asa mi se mai intampla, presupun ca ce stiam eu stiti deja si voi si am omis sa va mai spun, scuze).


int Numarul_Maxim_De_Numere_Consecutive(int v[], int n)
{
//Sortam vectorul crescator

bool verificat;

do
{
verificat = true;

for (int i = 0; i < n - 1; i++)
if (v[i] > v[i + 1])
{
int aux = v[i];
v[i] = v[i + 1];
v[i + 1] = aux;
verificat = false;
}
}
while (!verificat);

//Cautam cel mai mare sir consecutiv

int max = 1, k = 1;

for (int i = 0; i < n - 1; i++)
if (v[i] + 1 == v[i + 1])
k++;
else
{
if (max < k)
max = k;

k = 1;
}

if (max < k)
max = k;

return max;
}

Nu e cea mai optim? variant? dar m?car este una func?ional? :).

Baft?.

Edited by H3xoR
  • Downvote 1
Link to comment
Share on other sites


#include <iostream>
using namespace std;

int main()
{
unsigned n, nr=1, rez=0;
int a[50];
cin>>n; //nr de numere
cin>>a[0];
for (unsigned i=1;i<n;i++)
{
cin>>a[i];
if (a[i]==a[i-1]+1)
nr++;
else nr=0;
if (nr>rez) rez=nr;
}
cout << rez;
return 0;
}

Edited by bcman
  • Downvote 1
Link to comment
Share on other sites


#include <iostream>
using namespace std;

int main()
{
unsigned n, nr=0, rez=0;
int a[50];
cin>>n; //nr de numere
cin>>a[0];
for (unsigned i=1;i<n;i++)
{
cin>>a[i];
if (a[i]==a[i-1]+1)
nr++;
else nr=0;
if (nr>rez) rez=nr;
}
cout << rez;
return 0;
}

Codul t?u e gre?it, nu respect? cerin?a lui.

Link to comment
Share on other sites

Ce anume nu respec??

1) 1, 2, 3, 24, 25, 26 => programul t?u afi?eaz? 2, trebuie 3

2) 1, 2, 3, 4, 23, 24, 25 => programul t?u afi?eaz? 3, trebuie 4

3) 1, 2, 3, 5, 6, 7, 4 => programul t?u afi?eaz? 2, trebuie 7

S? spunem c? primele dou? cazuri pot fi rezolvate ad?ugând un +1 la rezultat, dar la cerin?a a 3-a.. nu prea se poate rezolva f?r? o sortare pentru c? respectivul ?ir e posibil s? nu fie ordonat ?i omi?i multe elemente care ar putea fi consecutive, dup? cum spune el în cerin??.

Sper s? nu o iei în nume de r?u, doar am scris s? ?tie b?iatul c? nu e potrivit codul t?u în totalitate cu cerin?a lui. Poate are nevoie s?-?i scoat? media sau ceva ?i decât s? ri?te.. mai bine s? mearg? la sigur.

Înc? o dat? scuze dac? te-am ofensat, nu a fost asta inten?ia.

Link to comment
Share on other sites

1) 1, 2, 3, 24, 25, 26 => programul t?u afi?eaz? 2, trebuie 3

2) 1, 2, 3, 4, 23, 24, 25 => programul t?u afi?eaz? 3, trebuie 4

3) 1, 2, 3, 5, 6, 7, 4 => programul t?u afi?eaz? 2, trebuie 7

S? spunem c? primele dou? cazuri pot fi rezolvate ad?ugând un +1 la rezultat, dar la cerin?a a 3-a.. nu prea se poate rezolva f?r? o sortare pentru c? respectivul ?ir e posibil s? nu fie ordonat ?i omi?i multe elemente care ar putea fi consecutive, dup? cum spune el în cerin??.

Sper s? nu o iei în nume de r?u, doar am scris s? ?tie b?iatul c? nu e potrivit codul t?u în totalitate cu cerin?a lui. Poate are nevoie s?-?i scoat? media sau ceva ?i decât s? ri?te.. mai bine s? mearg? la sigur.

Înc? o dat? scuze dac? te-am ofensat, nu a fost asta inten?ia.

Acum m-am uitat m-ai atent. Ai dreptate când spui c? nu returneaz? bine, nu ai dreptate cu motivul. Programul e bun, singura gre?eal? e c? am început cu nr de la 0, nu de la 1 cum ar fi trebuit. Pentru c? dac? introduceam 1 ?i 2, programul meu afi?a doar 1, neluând în calcul ?i primul num?r. Exemplul 3 dat de tine e gre?it, nu trebuie s? afi?eze 7, ci 3. Iar programul meu afi?a 2 (exact cum am spus mai sus). Am modificat acuma ?i am început cu nr de la 1 ?i acum e bine.

Stai lini?tit, nu sunt ofensat de critic?, dac? aceasta e f?cut? cu inten?ii bune.

Link to comment
Share on other sites


#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ifstream fin("numere.in");

unsigned long n, nr;
int count = 1;

fin>>n;
nr = n;

while( fin>>n ) {
if( n-1 == nr )
count++;
nr = n;
}

if( count == 1 )
cout<<"Nu exista numere consecutive!";
else
cout<<"Exista "<<count<<" numere consecutive!";

return 0;
}

Ceva mai eficient. Te rog sa-l testezi :)

Link to comment
Share on other sites

Acum m-am uitat m-ai atent. Ai dreptate când spui c? nu returneaz? bine, nu ai dreptate cu motivul. Programul e bun, singura gre?eal? e c? am început cu nr de la 0, nu de la 1 cum ar fi trebuit. Pentru c? dac? introduceam 1 ?i 2, programul meu afi?a doar 1, neluând în calcul ?i primul num?r. Exemplul 3 dat de tine e gre?it, nu trebuie s? afi?eze 7, ci 3. Iar programul meu afi?a 2 (exact cum am spus mai sus). Am modificat acuma ?i am început cu nr de la 1 ?i acum e bine.

Stai lini?tit, nu sunt ofensat de critic?, dac? aceasta e f?cut? cu inten?ii bune.

Scuze c? iar intervin s? te corectez dar, nu ai dreptate.. b?iatul a spus foarte clar în cerin??:

@SticKyWoX

Am uitat sa precizez, imi cer scuze.

Si anume ca:

1. Numerele nu e neaparat sa fie ordonate crescator sau descrescator, pot fi si aleator (adesea).

2. Daca ii dai: 1,2,3, 23, 24, 25 iti va afisa 3. Daca sunt 3 consecutive si altele 4 consecutive: 1,2,3,4, 23,24,25 iti va afisa 4. Afiseaza numarul cel mai mare de numere consecutive.

3. La 1,2,3,4,5,6,7 va afisa 7 dar si la 1, 2, 3, 5, 6, 7, 4 iti va afisa tot 7. Numerele nu sunt neaparat in ordine crescatoare sau descrescatoare.

Multumesc mult si scuze ca am uitat de asta (asa mi se mai intampla, presupun ca ce stiam eu stiti deja si voi si am omis sa va mai spun, scuze).

Programul trebuie s? afi?eze 7 la cerin?a 3) pentru c? ?irul con?ine numere care sunt strict cresc?toare doar c? nu se afl? în ordine, lucru care este specificat în cerin?? ca fiind posibil.

Nu pricep de ce nu cite?ti mai cu aten?ie ce a scris b?iatul ?i exemplele date de el, la program.. în loc s? m? contrazici pe mine, de parc? sunt eu vinovat c? nu ai în?eles ce trebuie s? fac? programul.


#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ifstream fin("numere.in");

unsigned long n, nr;
int count = 1;

fin>>n;
nr = n;

while( fin>>n ) {
if( n-1 == nr )
count++;
nr = n;
}

if( count == 1 )
cout<<"Nu exista numere consecutive!";
else
cout<<"Exista "<<count<<" numere consecutive!";

return 0;
}

Ceva mai eficient. Te rog sa-l testezi :)

La fel ca la bcman, nu func?ioneaz? pentru ultimul punct (cerin?a a 3-a). Î?i afi?eaz? 5 în loc de 7.

Edited by H3xoR
Link to comment
Share on other sites


int Numarul_Maxim_De_Numere_Consecutive(int v[], int n)
{
//Sortam vectorul crescator

bool verificat;

do
{
verificat = true;

for (int i = 0; i < n - 1; i++)
if (v[i] > v[i + 1])
{
int aux = v[i];
v[i] = v[i + 1];
v[i + 1] = aux;
verificat = false;
}
}
while (!verificat);

//Cautam cel mai mare sir consecutiv

int max = 1, k = 1;

for (int i = 0; i < n - 1; i++)
if (v[i] + 1 == v[i + 1])
k++;
else
{
if (max < k)
max = k;

k = 1;
}

if (max < k)
max = k;

return max;
}

Nu e cea mai optim? variant? dar m?car este una func?ional? :).

Baft?.

@H3xoR

Am bagat in codul meu algoritmul tau si vad ca nu e asa cum ar trebui:

xe0qk3.jpg

Dupa cum vezi in imagine i-am dat doua consecutive (1 si 2) despartite de altele 3 consecutive (34,35,36) si trebuia sa afiseze 3.

Link to comment
Share on other sites

@H3xoR

Am bagat in codul meu algoritmul tau si vad ca nu e asa cum ar trebui:

xe0qk3.jpg

Dupa cum vezi in imagine i-am dat doua consecutive (1 si 2) despartite de altele 3 consecutive (34,35,36) si trebuia sa afiseze 3.

Mie-mi afi?eaz? 3 la exemplul dat de tine.. uite-te:

oa0uu8.png

Posteaz? codul programului s? putem rezolva problema.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...