[JAVA] n interi consecutivi da una struttura

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 :P ;)

Risposte
hal9k
"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 :P ;)

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?

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

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

lorven
Un programma C che dovrebbe rispondere al problema:

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

hal9k
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

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

lorven
E' comunque un piacere fornire aiuto, nei limiti del possibile e delle proprie conoscenze.:D
La mia soluzione, comunque, così come quella di eugenio, NON prevede che la sequenza sia preventivamente ordinata. 8-)
Ciao!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.