Visualizzazione dei risultati da 1 a 3 su 3

Discussione: un quesito di logica

  1. #1

    un quesito di logica

    Avrei bisogno di scrivere codice php che risolva questo problema:


    avendo un array di 5 caratteri,all'inizio viene settata con il valore "aaaaa",poi,con un ciclo all'indietro,devo ottenere queste combinazioni:

    "aaaaa"
    "aaaab"
    "aaaac"


    "aaaba"
    "aaabb"
    "aaabc"

    "aaaca"
    "aaacb"
    "aaacc"

    "aabaa"
    "aabab"
    "aabac"

    "aabba"
    "aabbb"
    "aabbc"

    etc.etc.etc

    fino ad arrivare al valore finale "ccccc"

    Il range di ogni singola posizione comprende solo 3 valori,ossia "a","b","c",

    come potrei risolverlo da un punto di vista logico ? (poi ci penserei io a risolverlo con dei cicli for innestati in qualche maniera)

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    io l'ho fatto così

    Codice PHP:
    <?php
    function stampa($vet)
    {
        for(
    $i=0;$i<5;$i++)
        {
            
    $e=$vet[$i];
            switch(
    $e)
            {
                case 
    0:
                    echo 
    "a";
                    break;
                case 
    1:
                    echo 
    "b";
                    break;
                case 
    2:
                    echo 
    "c";
                    break;
            }
        }    
        
        echo 
    "
    "
    ;
    }

    function 
    fine($vet)
    {
        
    $fine=true;
        for(
    $i=0;($i<&& $fine);$i++)
        {
            
    $fine=($fine && $vet[$i]==2);
        }
        return 
    $fine;
    }

    function 
    add($vet)
    {
        
    $esci=false;
        for(
    $i=4;($i>=&& !$esci);$i--)
        {
            if(
    $vet[$i]<2)
            {
                
    $vet[$i]++;
                
    $esci=true;
            }
            else
            {
                
    $vet[$i]=0;
            }
        }
        return 
    $vet;
    }


    $vet=array(0,0,0,0,0);

    while(!
    fine($vet))
    {
       
    stampa($vet);
       
    $vet=add($vet);
    }
    stampa($vet);

    ?>

  3. #3
    L'idea è quella di usare un semplice numero progressivo e convertirlo in base 3, trasformando i canonici 0,1,2 in abc.
    Per testarlo ho fatto al volo anche l'algoritmo che sembra funzionare, te lo posto. Ovviamente scritto di getto e migliorabile.. magari c'è una funzione come base_convert che non ti costringe allo 0,1,2 oppure lo si puo' usare insieme a uno str_replace... ma non credo sia più performante di questa:

    Codice PHP:
    $string= Array("a","b","c");
    $base3;
    $n4;
    for(
    $i=0$i<pow($base,$n); $i++) {
        for(
    $j=$n-1$j>=0$j--) {
        echo 
    $string[floor($i/pow($base,$j))%$base];
        }
        echo 
    "
    \n"
    ;


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 © 2025 vBulletin Solutions, Inc. All rights reserved.