Jump to content
TEST101

Numarul de numere consecutive in C/C++ ?

Recommended Posts

Posted

Imi poate scrie cineva un cod in C/C++ care sa citeasca niste numere de la tastatura si apoi sa spuna cate din numerele citite sunt consecutive ?

Nu am scris nimic fiindca nu am nici o idee cum sa fac chestia asta...

Multumesc !

Posted (edited)

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
Posted

@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).

Posted (edited)
@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
Posted (edited)

#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
Posted

#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.

Posted
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.

Posted
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.

Posted


#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 :)

Posted (edited)
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
Posted

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.

Posted
@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.

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...