Pagina 1 di 2

Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 10:03
di MauriAxel
ragazzi mi serve una mano, devo scrivere un programma in C++. questa è la consegna:

Una sequenza di numeri è costruita nel modo seguente:

si scrive il numero 1 una volta, il numero 2 due volte, il numero 3 tre volte, il numero 4 quattro volte, il numero 5 cinque volte, il numero n n volte.

Si scriva un programma in grado di rispondere al seguente quesito:

Quale numero troviamo nella milionesima posizione?

Dopo aver scritto il programma in grado di fornire la risposta, si rifletta sulla possibilità di ottenere lo stesso risultato con una formula chiusa.

I primi due studenti che postano il programma avranno una valutazione di 8 i secondi due di 7.

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 10:42
di dannyb78
non ricordo il c++ ma l'algoritmo potrebbe essere questo. La complessità mi sembra valida anche se forse si potrebbe ridurla.

i_max= 1.000.000 (puoi anche chiederlo come input per vedere chi sta nella posizione i_max, così fai una cosa elegante
i=1;
num=1;
while (i<=1_max)
{ i=i+num;
num++;
}

alla fine del while num è il risultato che ti interessa. tutte le var sono interi.

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 13:48
di tonertemplum
dannyb78 ha scritto:non ricordo il c++ ma l'algoritmo potrebbe essere questo. La complessità mi sembra valida anche se forse si potrebbe ridurla.

i_max= 1.000.000 (puoi anche chiederlo come input per vedere chi sta nella posizione i_max, così fai una cosa elegante
i=1;
num=1;
while (i<=1_max)
{ i=i+num;
num++;
}

alla fine del while num è il risultato che ti interessa. tutte le var sono interi.


Farei anche io allo stesso modo, cambiando una sola istruzione...

Codice: Seleziona tutto
i_max= 1.000.000
i=1;
num=1;
while (i!=1_max) //cambierei questa istruzione
{ i=i+num;
num++;
}


Cioè direi "Finchè il contatore NON è UGUALE (
Codice: Seleziona tutto
!=
) a 1.000.000 (o al numero dato in input)

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 16:43
di `knives`
non conosco il c++.. ma in c lo farei cosi:

Codice: Seleziona tutto
#include <stdio.h>

unsigned int main ()
{
     int num1=1000, num2=0, num3=1,i,j=1;
 
         do
              {
                  for ( i = 1; i <= j ; i++ )
                     {
                          if (num3<=num1)
                          {
                                     num2=j;
                          num3++;
                          }
         
                      }
                      j++;
               } while(j<=num1);

printf("%d",num2);
}


quello a cui devi stare attento secondo me.. è proprio come dichiari le variabili perchè (almeno in c) int va da -32700 a 32700, quindi 1000000 è fuori dal range.

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 17:11
di dannyb78
così ha complessità maggiore dell'altro, e mi sembra anche meno leggibile (così a colpo d'occhio)

almeno però è scritto in c++ (o qualcosa che ci somiglia molto). Io non lo uso da almeno 8 anni e lo ho [quasi] completamente dimenticato. MAURIIIIII

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 17:26
di `knives`
è meno leggibile xke l ho scritto velocemente... senza badare troppo ad indentare o altro..

per la complessita.. non ho provato il vostro.. cmq il mio risolve la richiesta

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 17:41
di `knives`
l'oputput dei due è diverso.. il mio si ferma alla posizione voluta, il vostro la salta.. diciamo che basterebbe aggiungere al vostro un controllo sulla posizione giusta e fermarlo li oppure salvare la variabile della posizione.

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 18:23
di Joistick
non capisco una cosa.... qual'è il valore assegnato alla variabile i nel tuo programma knives???

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 18:40
di diegofio
i va da 1 a j l'assegnamento si fa all'interno del for

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 18:54
di dannyb78
`knives` ha scritto:l'oputput dei due è diverso.. il mio si ferma alla posizione voluta, il vostro la salta.. diciamo che basterebbe aggiungere al vostro un controllo sulla posizione giusta e fermarlo li oppure salvare la variabile della posizione.


il mio si ferma alla posizione voluta uscendo dal while, basta aggiungere l'output della variabile num che è il valore cercato. O forse sono totalmente arrugginito, il che è possibile.

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 18:55
di Joistick
diego.fiozzi ha scritto:i va da 1 a j l'assegnamento si fa all'interno del for

capito grazie diego :wink: :wink:

sistemando un po tutto alla fine vieni così
Codice: Seleziona tutto
#include <iostream>


using namespace std;

int main ()
{
   int num1,num2,num3,i,j;
   num1=1000;
   num2=0;
   num3=1;
   j=1;

         do
       {
          for(i=1;i<=j;i++)
                     {
                      if (num3<=num1)
                          {
                          num2=j;
                          num3++;
                          }
         
                      }
                      j++;
               } while(j<=num1);

       cout<<"Il numero in milionesima posizione e':"<<num2<<endl;
      system("PAUSE");
      return 0;
}

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 19:14
di `knives`
dannyb78 ha scritto:
`knives` ha scritto:l'oputput dei due è diverso.. il mio si ferma alla posizione voluta, il vostro la salta.. diciamo che basterebbe aggiungere al vostro un controllo sulla posizione giusta e fermarlo li oppure salvare la variabile della posizione.


il mio si ferma alla posizione voluta uscendo dal while, basta aggiungere l'output della variabile num che è il valore cercato. O forse sono totalmente arrugginito, il che è possibile.



l ho provato, e dato che somma le varie posizioni non avrai la milionesima.


@joistick : num1 = 1000 del mio è in realta 1000000. non va bene un int.. ma deve essere un long int o un unsigned int, per il discorso che dicevo prima

se il tuo è scritto in c++ ora provo a sistemarlo..

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 19:46
di Joistick
`knives` ha scritto:

@joistick : num1 = 1000 del mio è in realta 1000000. non va bene un int.. ma deve essere un long int o un unsigned int, per il discorso che dicevo prima

se il tuo è scritto in c++ ora provo a sistemarlo..

si ho visto... comunque il mio è scritto in C++ e compila solo che va fino al 1000...
se compilo con un long int non finisce più( e da 5 minuti in esecuzione), adesso provo con unsigned ma non penso cambi e penso sia colpa del milione...

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 20:06
di dannyb78
non ricordo la sintassi, per cui il mio non è scritto in c++, anche se conoscendo la sintassi da lì si dovrebbe arrivare velocemente al codice.

il mio programma somma il numero alla posizione e scorre il numero. Chiaramente però fa il controllo sulla posizione. Si ferma quando supera la posizione i_max e restituisce l'intero con il quale ha superato i_max (che deve essere uguale a quello in posizione i_max)

Re: Quale numero troviamo nella milionesima posizione?

MessaggioInviato: 04 apr 2008, 20:49
di MauriAxel
ecco ci ho provato anche io a farlo:

Codice: Seleziona tutto
#include <iostream>
using namespace std;

int main ()

{
int cont=0;
int num=0;
do
{
   num=num+1;
   cont=cont+num;
}while(cont<=1000000);

cout<< "L'elemento in milionesima posizione e' il numero "<<num;
cout<<endl;

system("pause");
return 0;
}