Soluzione problema Matematico



  • Soluzione problema Matematico
    di Pistolero (utente non iscritto) data: 13/09/2013 11:50:23

    Devo scrivere il codice in VBA che mi risolva il seguente problema matematico:

    Due amici, A e B, si incontrano dopo diversi anni e cominciano a conversare finché il discorso va a finire sui figli.
    A : "Che età hanno i tuoi tre figli ?"
    B : "Guarda, ti posso dire che il prodotto delle loro età è uguale a 36".
    A : "Questa informazione purtroppo non mi basta !"
    B : "È vero; ti dirò allora che la somma delle loro tre età è uguale al numero civico di quella casa".
    A : "Uhm...; però ancora non mi è sufficiente!"
    B : "Hai ragione. Ti posso dire che il più piccolo ha gli occhi azzurri!"
    A : OK. Ora so tutto.
    Qual è l'età dei tre figli?

    Qualcuno sa come fare???
    Grazie a chi mi aiuterà



  • di Grograman data: 13/09/2013 12:07:13

    Che è, il 153esimo quesito della susi?

    Tu risolvicelo in italiano che noi lo mettiamo in vibiaese :D



  • di Pistolero (utente non iscritto) data: 13/09/2013 12:17:20

    Ciao grograman
    intanto grazie per la risposta
    è una cosa simile...
    non so bene matematicamente come si risolva...

    le informazioni certo sono:
    1) a*b*c = 36
    2) a+b+c = ? (nomero civico) ma dovrebbero esserci più combinazioni di a+b+c che danno la stessa risultato poichè questa info non è sufficiente alla risoluzione del quesito
    3) ponendo a e b i due maggiori a>c e b > c
    Altro non saprei
    basta?




  • di totygno71 data: 13/09/2013 12:17:44

    mmm...
    Sa di compito a casa... ^_^



  • di Grograman data: 13/09/2013 13:02:30

    No che non basta, tu lo risolvi, noi telo codifichiamo, troppo comodo altrimenti


    A parte che io ormai sono regredito a livello pallottoliere con le equazioni...



  • di Raffaele_53 (utente non iscritto) data: 13/09/2013 13:38:08

    http://www.cicap.org/new/articolo.php?id=200111



  • di totygno71 data: 13/09/2013 13:39:42

    Esatto...
    Ma mi serve in vba



  • di totygno71 data: 13/09/2013 14:01:29

    GLI serve volevo dire...

    Io la soluzione ce l'ho già U_U


  • Problema matematico
    di Santuberto (utente non iscritto) data: 13/09/2013 14:11:28

    Resta incredibile la semplicità con la quale, l’amico “A”, ha risolto il problema. Che tipo in gamba!



  • di Vecchio Frac data: 13/09/2013 14:44:16

    Io non ho guardato la soluzione ^_^
    Voi che l'avete fatto, ditemi: è un quesito che si può risolvere con strumenti matematici? c'è un algoritmo matematicamente possibile che non sia derivato da, ipotizziamo, giochi di parole o modifiche del sillogismo?
    Basta un sì o un no :)





  • di Grograman data: 13/09/2013 14:51:29

    cit: "o modifiche del sillogismo?"


    No



  • di Raffaele_53 (utente non iscritto) data: 13/09/2013 15:09:45

    Matematicamente impossibile
    Nel Post (mancava il riferimento del numero civico visto = 13)

    B : "Hai ragione. Ti posso dire che il più piccolo ha gli occhi azzurri!"

    Fà capire che non sono gemelli i più piccoli, col VBA bisogna creare una variante che paragoni "il" a 1
    Se cambia quesito oppure la parola "il" con un'altra non serve più a nulla il codice.

    Ps. Sarei curioso di vedere il codice di totygno71



  • di totygno71 (utente non iscritto) data: 13/09/2013 15:43:27

    1. si calcola tutte le possibili soluzioni che restituisco il valore 36 dal prodotto delle tre età A*B*C

    2. Di queste si evince che solo due possono essere quelle giuste perchè la loro somma è uguale (È vero; ti dirò allora che la somma delle loro tre età è uguale al numero civico di quella casa".
    A : "Uhm...; però ancora non mi è sufficiente!"
    le due opzioni sono
    6 6 1
    oppure
    9 2 2
    3. essendo il piu piccolo con gli occhi azzuri indica che la soluzione sia
    6 6 1
    perchè c'è solo uno piu piccolo degli altri



  • di Raffaele_53 (utente non iscritto) data: 13/09/2013 15:49:33

    Ho scritto il codice, purtroppo mi sono bloccato per una stupidata.
    (ho messo D come Long, invece scrivendo la risposta 166 in un inputbox),non la trova esatta.
    C'è un modo per bloccare la procedura e salvare il codice?


    Ritenta:
    CC = Inputbox ("Risposta", "Quanti anni anno?")
    If CC = D Then
    msgbox ("Giusto")
    Exit Sub
    Else
    msgbox ("Sbagliato")
    Call Ritenta
    End if



  • di Raffaele_53 (utente non iscritto) data: 13/09/2013 15:51:12

    Edit Goto Ritenta



  • di Mister_x (utente non iscritto) data: 13/09/2013 16:08:09

    ciao a tutti

    stavo leggendo il post, al quale come riferimento come dice raffaele manca il numero civico quindi le soluzioni in questo caso sono molteplici
    ess. stando a una nota messa in seconda inserzione
    3) ponendo a e b i due maggiori a>c e b > c
    quindi si deduce che C e' il minore di tutti ma con al possibilita' che A e B siano gemelli o no

    partiamo con numero civico = 13 abbiamo
    A=6 B=6 C=1 6*6*1=36
    se il civico e' 14
    A=9 B=4 C=1 9*4*1=36
    se il civico e' 16
    A=12 B=3 C=1 12*3*1=36
    civico 21
    A=18 B=2 C=1 18*2*1=36

    ci saranno altre possibilita

    ciao da Mister_x






  • di tortyno (utente non iscritto) data: 13/09/2013 16:27:35

    Il civico è sicuramente 13 poichè è l'unico numero che dalla sonna delle età si presenta per 2 volte... quindi il tizio dice le informazioni non sono sufficienti



  • di totygno71 (utente non iscritto) data: 13/09/2013 16:42:01

    I tre figli hanno rispettivamente 6, 6 ed 1 anno.

    Dalla prima informazione (il prodotto delle tre età deve essere 36) si ricava che le possibilità sono:


    36 1 1

    18 2 1

    12 3 1

    6 6 1

    9 4 1

    2 2 9

    3 6 2

    4 3 3

    All'amico non basta sapere la somma. Ciò vuol dire che più combinazioni devono avere lo stesso totale. Le combinazioni con lo stesso totale sono:
    6 6 1
    2 2 9
    Il numero civico visto è infatti il 13, cioè l'unico totale che risulta in più di una possibilità. Sapere il totale sarebbe stato invece sufficiente in tutti gli altri casi. A questo punto, l'informazione finale (c'è un più piccolo) ci fa escludere il caso di due gemelli piccoli (quelli di 2 anni).




  • di Raffaele_53 (utente non iscritto) data: 13/09/2013 16:52:35

    Ha ragione totygno71, il numero civico non serve.

    >>>All'amico non basta sapere la somma
    Precisazione, se il numero civico fosse stato scritto. EX 14 abbiamo gia la stringa vicente 1,4,9 e non abbiamo bisogno della terza domanda.

    Proprio perchè viene fatta serve a dissipare l'ultimo quesito che può essere solo in caso di doppioni di numeri



  • di Vecchio Frac data: 13/09/2013 17:41:46

    Abbiamo degli insigni enigmisti qui, bene bene ^_^

    cit. "C'è un modo per bloccare la procedura"
    ---> Avrai già risolto ma ti basta premere la combinazione di tasti Ctrl-Interr (quest'ultimo sulla mia tastiera reca anche la scritta "Pausa" nella parte superiore)

    Il punto è, se sia possibile far risolvere questo problema a un calcolatore.





  • di Gaetanopr (utente non iscritto) data: 13/09/2013 18:05:48

    Salve a tutti, io un codice l'ho scritto, il tempo di testarlo con altri valori per sapere se è corretto oppure una coincidenza e lo posto


    Ciao



  • di pistolero (utente non iscritto) data: 13/09/2013 21:17:05

    immagino non si possa risolvere con vba



  • di Gaetanopr (utente non iscritto) data: 13/09/2013 21:21:24

    cit>>Devo scrivere il codice in VBA che mi risolva il seguente problema matematico:

    Non so cosa tu voglia dire!!!! al massimo si può scrivere un codice a soluzione trovata, cioè dando le giuste istruzioni al programma per arrivare alla soluzione, istruzioni dettagliatamente spiegate dagli altri in particolare totygno71
    Quindi scomponendo il 36 trovo le varie combinazioni, da queste trovo le combinazioni che sommate diano la stessa somma, e da queste il numero minimo che non sia presente due volte nella combinazione stessa.
    Il codice è molto grezzo, senza variabili dichiarate, e magari un po' contorto e trova le combinazioni ai numeri che hanno radici quadra intera, almeno l'ho provato con il 4-9-16-25-36-49 e restituisce le giuste combinazioni
    Considerate che sono un novellino




     
    Sub Quiz()
    
    LastRow = Range("A" & Rows.Count).End(xlUp).Row
    Range("A1:D" & LastRow).ClearContents
    
    Risultato = Int(InputBox("inserisci valore"))
    rad = Sqr(Risultato)
    
     
      If rad <> Int(rad) Then MsgBox "Radice quadra non intera": Exit Sub
    riga = 0
    For i = Risultato - 2 To 1 Step -1
     If Risultato / i = Int(Risultato / i) Then
        riga = riga + 1
        Cells(riga, 1).Value = Risultato / i
      End If
    Next i
    
    riga1 = 0
    For i = 1 To riga
      risultato1 = Risultato / Cells(i, 1).Value
       If risultato1 = Int(risultato1) Then
         If risultato1 < rad Or risultato1 = rad Then
            riga1 = riga1 + 1
            Cells(riga1, 2).Value = risultato1
          ElseIf risultato1 > rad Then
          If (Risultato / Cells(i, 1).Value) / 2 = Int((Risultato / Cells(i, 1).Value) / 2) Then
            riga1 = riga1 + 1
            Cells(riga1, 2).Value = (Risultato / Cells(i, 1).Value) / 2
          Else
            riga1 = riga1 + 1
            Cells(riga1, 2).Value = (Risultato / Cells(i, 1).Value) / 3
          End If
         End If
       End If
    Next i
    
    For c = 1 To riga
     Cells(c, 3).Value = Risultato / Cells(c, 1).Value
     Cells(c, 3).Value = Cells(c, 3).Value / Cells(c, 2).Value
    Next c
     
     Ris = 1
     For i = 1 To riga
      Risultato2 = Cells(i, 1).Value + Cells(i, 2).Value + Cells(i, 3).Value
        For n = 1 To riga
        Confronto = Cells(n, 1).Value + Cells(n, 2).Value + Cells(n, 3).Value
          If Risultato2 = Confronto Then
           Ris = Ris + 1
          End If
       Next n
          If Ris > 2 Then
            Cells(i, 4) = Cells(i, 1).Value & Cells(i, 2).Value & Cells(i, 3).Value
          End If
        Ris = 1
      Next i
       
      For i = 1 To riga
       If Cells(i, 4) <> "" Then
         MinimoV = Range("A" & i & ":C" & i) '.Value
         Minimo = Application.WorksheetFunction.Min(MinimoV)
         If Application.WorksheetFunction.CountIf(Range("A" & i & ":C" & i), Minimo) = 1 Then
           MsgBox "Combinazione trovata " & Cells(i, 4).Value
         End If
       End If
       Next i
      End Sub
    



  • di Gaetanopr (utente non iscritto) data: 13/09/2013 21:36:40

    il primo ciclo for si può cambiare in questo modo

     
    For i = 1 To Risultato / 2        'Risultato - 2 To 1 Step -1
    



  • di Pistolero (utente non iscritto) data: 16/09/2013 09:11:13

    funziona---