Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabiano B Araujo

Combinações com PHP

Recommended Posts

Estou tentando modificar esse script para que ele combine números da forma apresentada imediatamente abaixo

12 345
12 678 
...

e não desse modo, como faz agora:

 

12 345 
12 346 
12 347 ...

 

 

Meu conhecimento de PHP ainda não parece suficiente para fazer tal modificação.

Alguém pode ajudar?

<?php
class Combinations implements Iterator
{
    protected $c = null;
    protected $s = null;
    protected $n = 0;
    protected $k = 0;
    protected $pos = 0;

    function __construct($s, $k) {
        if(is_array($s)) {
            $this->s = array_values($s);
            $this->n = count($this->s);
        } else {
            $this->s = (string) $s;
            $this->n = strlen($this->s);
        }
        $this->k = $k;
        $this->rewind();
    }
    function key() {
        return $this->pos;
    }
    function current() {
        $r = array();
        for($i = 0; $i < $this->k; $i++)
            $r[] = $this->s[$this->c[$i]];
        return is_array($this->s) ? $r : implode('', $r);
    }
    function next() {
        if($this->_next())
            $this->pos++;
        else
            $this->pos = -1;
    }
    function rewind() {
        $this->c = range(0, $this->k);
        $this->pos = 0;
    }
    function valid() {
        return $this->pos >= 0;
    }

    protected function _next() {
        $i = $this->k - 1;
        while ($i >= 0 && $this->c[$i] == $this->n - $this->k + $i)
            $i--;
        if($i < 0)
            return false;
        $this->c[$i]++;
        while($i++ < $this->k - 1)
            $this->c[$i] = $this->c[$i - 1] + 1;
        return true;
    }
}


foreach(new Combinations("1234567", 5) as $substring)
    echo $substring, ' ';

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Suspeito
      Boa tarde.
       
      To com uma dúvida talvez simples, mas como ainda não tenho tanto conhecimento é muito complexa kk
       
      Seguinte: Tenho essas 12 dezenas: (só exemplos)
      -   37,38,39,40
      -   17,18,19,20
      -   05,06,07,08
       
      Queria fazer com que elas fossem exibidas em combinações de 3 dezenas, sem que nenhuma combinação se repita, até o final das combinações possíveis.
       
      05,37,40
      19,17,05
      37,18,06
      ...
    • Por ifspinit
      Olá, sou iniciante em PHP. Estou com um problema na resolução de um exercício. Devo ler uma string que faça a substituição de determinados caracteres por números, criando um array com as combinações possíveis.
       
      As regras são de substituição são:
      X - Qualquer número de 0 a 9
      Y -  Pode ser 1 ou 2
      Z -  Qualquer número de 5 a 9
       
      Por exemplo:
      Entrada : X123
      Saída: 0123, 1123, 2123, 3123, 4123, 5123, 6123, 7123, 8123, 9123
       
      Entrada: Y12
      Saída: 112, 212
       
      Entrada: Y12Z
      Saída: 1125, 2125, 1126, 2126, 1127, 2127, 1128, 2128, 1129, 2129
       
      Entrada: XX
      Saída: 00, 10, 20, 30, 40, 50, 60, 70, 80, 90, 01, 11, 21, 31, 41, 51, 61, 71, 81, 91, 02, 12, 32, 42, 52, 62, 72, 82, 92, etc...  
       
       
      Fiz o código monstrouso abaixo onde verifica
      se tem x, y e z;
      se tem x e y;
      se tem x e z;
      se tem y e z;
      se tem somente x;
      se tem somente y;
      se tem somente z.
       
       
      <php? $verif = strstr($str, "x"); $verif2 = strstr($str, "y"); $verif3 = strstr($str, "z"); if($verif and $verif2 and $verif3){ for ($k=1; $k<=2; $k++){ for ($j=5; $j<=9; $j++){ for ($i = 0; $i <= 9; $i++){ $teste = str_replace("x", "$i", $str); $teste2= str_replace("z", "$j", $teste); $teste3 = str_replace("y", "$k", $teste2); array_push($meuarray, $teste3); } } } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } else if($verif and $verif2){ for ($j=1; $j<=2; $j++){ for ($i = 0; $i <= 9; $i++){ $teste = str_replace("x", "$i", $str); $teste2 = str_replace("y", "$j", $teste); array_push($meuarray, $teste2); } } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } else if($verif and $verif3){ for ($j = 5; $j <= 9; $j++){ for ($i = 0; $i <= 9; $i++){ $teste = str_replace("x", "$i", $str); $teste2 = str_replace("z", "$j", $teste); array_push($meuarray, $teste2); } } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } else if($verif2 and $verif3){ for ($j = 1; $j <= 2; $j++){ for ($i = 5; $i <= 9; $i++){ $teste = str_replace("y", "$i", $str); $teste2 = str_replace("z", "$j", $teste); array_push($meuarray, $teste2); } } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } else if($verif){ for ($i = 0; $i <= 9; $i++){ $teste = str_replace("x", "$i", $str); array_push($meuarray, $teste); } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } else if($verif2){ for ($i = 1; $i <= 2; $i++){ $teste = str_replace("y", "$i", $str); array_push($meuarray, $teste); } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } else if($verif3){ for ($i = 5; $i <= 9; $i++){ $teste = str_replace("z", "$i", $str); array_push($meuarray, $teste); } $arrayfinal = implode(",", $meuarray); echo $arrayfinal; } ?>  
      Funciona para quando tiver apenas um caso de cada. Mas se houver dois x, três x, etc, não funcionará. Alguém poderia me ajudar?
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.