[JAVA] n interi consecutivi da una struttura
Salve,
ho questo problema. Data una sequenza di interi, devo poter stabilire se in tale sequenza sono contenuti n interi consecutivi.
Per ora sono riuscito a fare questo: ad esempio se ho la lista 2,3,7,9,10,11 mi calcolo 2,3,9,10,11. Ora di questa lista mi interessa sapere se vi sono contenuti n interi positivi.
Si accettano suggerimenti
ho questo problema. Data una sequenza di interi, devo poter stabilire se in tale sequenza sono contenuti n interi consecutivi.
Per ora sono riuscito a fare questo: ad esempio se ho la lista 2,3,7,9,10,11 mi calcolo 2,3,9,10,11. Ora di questa lista mi interessa sapere se vi sono contenuti n interi positivi.
Si accettano suggerimenti


Risposte
"hal9k":
Salve,
ho questo problema. Data una sequenza di interi, devo poter stabilire se in tale sequenza sono contenuti n interi consecutivi.
Per ora sono riuscito a fare questo: ad esempio se ho la lista 2,3,7,9,10,11 mi calcolo 2,3,9,10,11. Ora di questa lista mi interessa sapere se vi sono contenuti n interi positivi.
Si accettano suggerimenti![]()
chiedo scusa,forse nn mi sono espresso bene..
allora faccio un esempio pratico. Ho la mia lista di interi 2,3,7,9,10,11,15,17. Voglio sapere se ci sono (ad esempio) 3 numeri interi consecutivi, in questo caso si, e sono 9,10,11.
Quello che sono riuscito a fare fino ad ora è calcolarmi una nuova lista solo con numeri interi consecutivi tra loro, quindi nell'esempio precedente 2,3,9,10,11. Ora avendo questa lista, come faccio a sapere se ci sono 3 numeri consecutivi?
Non conosco il java pero' provo a livello umano
Noi abbiamo un vettore struttura di N interi assegnati.
struttura[0.....N-1].
devo determinare se esistono X consecutivi (contaX) e quanti ne sono (contaN).
(1) Per l'indice I che va da 1 a N-1
(1.2) SE (struttura = struttura[I-1]) ALLORA contaX = contaX + 1 ALTRIMENTI contaX = 0
(1.3) SE (contaX >= X-1) ALLORA contaN = contaN + 1
(2) Nella struttura sono presenti contaN sequenze di X consecutivi
Questa procedura non richiede la creazione di una nuova struttura privata degli elementi non consecutivi.
----------
Esempio proposto da te:
Elementi della struttura:
2,3,7,9,10,11
Se X = 2 il risultato sara':
Ci sono 3 sequenze da 2 consecutivi.
infatti sono 2,3 - 9,10 - 10-11
Se X = 3 il risultato sara':
Ci sono 1 sequenze da 3 consecutivi.
Infatti e' 9,10,11
----------------
Spero sia questo cio' che cerchi e se ritieni che posso aiutarti in una richiesta piu' specifica, scrivi pure.
A presto,
EugenioA
Noi abbiamo un vettore struttura di N interi assegnati.
struttura[0.....N-1].
devo determinare se esistono X consecutivi (contaX) e quanti ne sono (contaN).
(1) Per l'indice I che va da 1 a N-1
(1.2) SE (struttura = struttura[I-1]) ALLORA contaX = contaX + 1 ALTRIMENTI contaX = 0
(1.3) SE (contaX >= X-1) ALLORA contaN = contaN + 1
(2) Nella struttura sono presenti contaN sequenze di X consecutivi
Questa procedura non richiede la creazione di una nuova struttura privata degli elementi non consecutivi.
----------
Esempio proposto da te:
Elementi della struttura:
2,3,7,9,10,11
Se X = 2 il risultato sara':
Ci sono 3 sequenze da 2 consecutivi.
infatti sono 2,3 - 9,10 - 10-11
Se X = 3 il risultato sara':
Ci sono 1 sequenze da 3 consecutivi.
Infatti e' 9,10,11
----------------
Spero sia questo cio' che cerchi e se ritieni che posso aiutarti in una richiesta piu' specifica, scrivi pure.
A presto,
EugenioA
Se ritieni opportuno posso scriverti la procedura in linguaggio C.
Se non ricordo male, il Java, nella sua piattaforma usa un metalinguaggio molto simile al C.
Vero ?
EugenioA
Se non ricordo male, il Java, nella sua piattaforma usa un metalinguaggio molto simile al C.
Vero ?
EugenioA
Un programma C che dovrebbe rispondere al problema:
p.s.: dovrebbe funzionare anche per sequenze di più di 2 interi consecutivi.
#include <iostream.h> #include <stdlib.h> int main() { const int nel=10; /* num. elem. sequenza di interi */ int v[nel]; /* vettore contenente la sequenza */ int c; /* contatore elementi consecutivi */ int i; /* indice vettore */ int n; /* num. elem. consecutivi ricercati */ int p; /* posiz. iniziale sequenza consecutivi*/ int ns; /* numero di sequenze trovate */ bool fine; /* controllo su fine ciclo ricerca */ for (i=0;i<nel;i++) { cout<< "elem. " << i+1 << ": "; cin >> v[i]; } do{ c=1; ns=0; cout<< "num. elem. consecutivi? "; cin >> n; if (n<2) fine=true; else fine=false; i=0; p=0; while (!fine) if (i>nel-2) fine=true; else {if (v[i]==v[i+1]-1) { c+=1; if (c==n){ ns+=1; cout << "trovata una seq. di " << n; cout << " interi consecutivi in posiz. " << p+1 << '\n'; c=1;i=p;p+=1; } } else {c=1;p=i+1; } i+=1; } cout << "in totale " << ns <<" seq. di " << n << " interi consecutivi"; cout<< '\n'; } while (n!=0); system("PAUSE"); return 0; }
p.s.: dovrebbe funzionare anche per sequenze di più di 2 interi consecutivi.

ragazzi grazie per l'aiuto
I metodi da voi scritti presuppongono che la sequenza sia interamente ordinata. Diciamo che ero partito anche io da una soluzione vicina a quella di eugenio, poi ho deciso di adottare il seguente sorgente che sembra funzionare:
postiDisponibiliNoComma nPosti rappresentano, il vettore che conterrà gli nPosti consecutivi
ciao e ancora grazie per l'aiuto

I metodi da voi scritti presuppongono che la sequenza sia interamente ordinata. Diciamo che ero partito anche io da una soluzione vicina a quella di eugenio, poi ho deciso di adottare il seguente sorgente che sembra funzionare:
postiDisponibiliNoComma nPosti rappresentano, il vettore che conterrà gli nPosti consecutivi
private Vector consecutivi(Vector postiDisponibiliNoComma,int nPosti) { Vector cons=new Vector(); int val=0,count=0,corrente=0; Integer intVal,intVal2; //primo elemento intVal=Integer.parseInt((String)postiDisponibiliNoComma.elementAt(0)); val=intVal.intValue(); corrente=val; for(int i=0; i<postiDisponibiliNoComma.size(); i++) { intVal=Integer.parseInt((String)postiDisponibiliNoComma.elementAt(i)); val=intVal.intValue(); cons.add(val); if(corrente==val-i) { corrente=val-i; count++; if(count==nPosti) break; } else { cons.removeAllElements(); cons.add(val); count=1; corrente=val-i; } } return cons; }
ciao e ancora grazie per l'aiuto
E' comunque un piacere fornire aiuto, nei limiti del possibile e delle proprie conoscenze.
La mia soluzione, comunque, così come quella di eugenio, NON prevede che la sequenza sia preventivamente ordinata.
Ciao!

La mia soluzione, comunque, così come quella di eugenio, NON prevede che la sequenza sia preventivamente ordinata.

Ciao!