Visualizzazione dei risultati da 1 a 10 su 30

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Quote Originariamente inviata da gfr1991 Visualizza il messaggio
    Grazie per la disponibilità innanzitutto!
    No, in realtà io ho bisogno di trovare la combinazione che, dati due array, mi restituisca la somma più alta fra i due prendendo UNO E UN SOLO valore per ogni array, senza possibilità di usare un valore due volte.

    Se ho per esempio

    a= 30
    b= 29
    c= 20
    d= 10
    e= 5

    e ho

    array1 (a, b, c)
    array2 (a, c, d)

    Il codice dovrebbe essere in grado di prendere dall'array 1 il valore B (cioè 29), e dall'array 2 il valore A (cioè 30), perchè questa è la combinazione che restituisce il valore massimo della somma array1+array2!
    Prova il mio ultimo esperimento

    Codice PHP:
    $array = [[30,29],[30,23,21,20]];


    function 
    SommaUnicaMassima(array $array){
        
    $max $vals = [];

        
    //ciclo $array per avere un unico array
        
    foreach($array as $arr)
            if(
    is_array($arr))
                
    $vals array_merge($vals,$arr);   

        
    //trovo tanti valori massimi quanti il numero degli array
        
    while(count($max)<count($array) && count($vals)>0)
        {
            
    //trovo il valore massimo
            
    $m max($vals);
            
    //lo aggiungo
            
    $max[] = $m;
            
    //lo rimuovo
            
    $vals array_diff($vals,[$m]);
        }

        
    //ritorno con la somma dei valori
        
    return array_sum($max);
    }


    echo 
    SommaUnicaMassima($array); //59 

    Edit: funziona a metà per ora non si basa su un singolo elemento per array , vabbè riprovo dopo semmai, vedi di completarlo te...
    Ultima modifica di RoTeam; 10-08-2014 a 15:59

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,509
    Quote Originariamente inviata da RoTeam Visualizza il messaggio
    ...
    Edit: funziona a metà per ora non si basa su un singolo elemento per array , vabbè riprovo dopo semmai, vedi di completarlo te...
    Io almeno un algoritmo che funziona l'ho trovato, anche se ha complessità O(n!) che è uno degli schifi più schifosi che si possa immaginare.

    a te


  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Io almeno un algoritmo che funziona l'ho trovato, anche se ha complessità O(n!) che è uno degli schifi più schifosi che si possa immaginare.

    a te

    Manda manda! Magari poi si riesce a semplificarlo

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Io almeno un algoritmo che funziona l'ho trovato, anche se ha complessità O(n!) che è uno degli schifi più schifosi che si possa immaginare.

    a te

    Andiamo sul personale

    Codice PHP:
    abstract class IResettableArray
    {
        protected 
    $array;

        public function 
    reset()
        {
            
    $this->array = [];
        }
    }

    class 
    IntegrableArray extends IResettableArray
    {
        public function 
    __construct(array $arr)
        {
            foreach(
    $arr as $num)
                
    $this->add($num);
        }

        public function 
    add($e)
        {
            if(
    is_numeric($e))
                
    $this->array[] = $e;
            else
                throw new 
    Exception("Sono permessi solo numeri");
        }

        public function 
    count()
        {
            return 
    count($this->array);
        }

        public function 
    getArray()
        {
            return 
    $this->array;
        }
    }

    class 
    MaxUniqueSumBuilder extends IResettableArray
    {
        public function 
    computeSum()
        {
            
    $maxs array_map('max',$this->array);
            
    $sum = [];

            foreach(
    $this->array as $k => $arr)
            {
                
    $max max($arr);
                unset(
    $maxs[$k]);

                while(
    is_numeric($max) && in_array($max,$maxs))
                {
                    
    $arr array_diff($arr,[$max]);
                    
    $max count($arr)>max($arr) : false;
                }

                if(
    is_numeric($max)) $sum[] = $max;
            }

            return new 
    ComputedSum($sum);
        }

        public function 
    addMultiArray(array $arr)
        {
            foreach(
    $arr as $ia)
                if(
    $ia instanceof IntegrableArray)
                    
    $this->addArray($ia);
        }

        public function 
    addArray(IntegrableArray $arr)
        {
            
    $this->array[] = $arr->count()>$arr->getArray() : [0];
        }
    }

    class 
    ComputedSum extends IntegrableArray
    {
        public function 
    __construct(array $max)
        {
            
    parent::__construct($max);
        }

        public function 
    getSum()
        {
            return 
    array_sum($this->array);
        }
    }

    $array = [new IntegrableArray([30,29]),new IntegrableArray([30,23,21,20])];
    $builder = new MaxUniqueSumBuilder();
    $builder->addMultiArray($array);
    echo 
    $builder->computeSum()->getSum(); 
    Ultima modifica di RoTeam; 10-08-2014 a 17:31

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Quote Originariamente inviata da RoTeam Visualizza il messaggio
    Andiamo sul personale

    Codice PHP:
    abstract class IResettableArray
    {
        protected 
    $array;


        public function 
    reset()
        {
            
    $this->array = [];
        }
    }


    class 
    IntegrableArray extends IResettableArray
    {
        public function 
    __construct(array $arr)
        {
            foreach(
    $arr as $num)
                
    $this->add($num);
        }


        public function 
    add($e)
        {
            if(
    is_numeric($e))
                
    $this->array[] = $e;
            else
                throw new 
    Exception("Sono permessi solo numeri");
        }


        public function 
    count()
        {
            return 
    count($this->array);
        }


        public function 
    getArray()
        {
            return 
    $this->array;
        }
    }


    class 
    MaxUniqueSumBuilder extends IResettableArray
    {
        public function 
    computeSum()
        {
            
    $maxs array_map('max',$this->array);
            
    $sum = [];


            foreach(
    $this->array as $k => $arr)
            {
                
    $max max($arr);
                unset(
    $maxs[$k]);


                while(
    in_array($max,$maxs) && count($arr)>0)
                {
                    
    $arr array_diff($arr,[$max]);
                    
    $max max($arr);
                }
                if(
    is_numeric($max)) $sum[] = $max;
            }


            return new 
    ComputedSum($sum);
        }


        public function 
    addMultiArray(array $arr)
        {
            foreach(
    $arr as $ia)
                if(
    $ia instanceof IntegrableArray)
                    
    $this->addArray($ia);
        }


        public function 
    addArray(IntegrableArray $arr)
        {
            
    $this->array[] = $arr->count()>$arr->getArray() : [0];
        }
    }


    class 
    ComputedSum extends IntegrableArray
    {
        public function 
    __construct(array $max)
        {
            
    parent::__construct($max);
        }


        public function 
    getSum()
        {
            return 
    array_sum($this->array);
        }
    }


    $array = [new IntegrableArray([30,29]),new IntegrableArray([30,23,21,20])];
    $builder = new MaxUniqueSumBuilder();
    $builder->addMultiArray($array);
    echo 
    $builder->computeSum()->getSum(); 
    Sto cercando di provare il codice ma non riesco, mi restituisce un errore riguardo l'uso delle "["... dove sbaglio?

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Quote Originariamente inviata da gfr1991 Visualizza il messaggio
    Sto cercando di provare il codice ma non riesco, mi restituisce un errore riguardo l'uso delle "["... dove sbaglio?
    Qual'è la tua versione del php? Gli array tramite [] sono disponibili dal php5.4, aggiornalo

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    23
    Quote Originariamente inviata da RoTeam Visualizza il messaggio
    Qual'è la tua versione del php? Gli array tramite [] sono disponibili dal php5.4, aggiornalo
    5.2, e onestamente non saprei nemmeno come aggiornarlo giacchè il sito è hostato su server virtuale... ((

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Quote Originariamente inviata da gfr1991 Visualizza il messaggio
    5.2, e onestamente non saprei nemmeno come aggiornarlo giacchè il sito è hostato su server virtuale... ((
    Usa xampp

    ps: se un array contiene solo numeri già sommati niente vero? (ho aggiornato la funzione)

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.