Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2011, 12h58   #1
Invité de passage
 
Homme Rodolphe Biraud
Développeur Web
Inscription : décembre 2011
Messages : 1
Détails du profil
Informations personnelles :
Nom : Homme Rodolphe Biraud
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2011
Messages : 1
Points : 0
Points : 0
Par défaut Décomposer un nombre en fonction de valeur d'une liste

Bonjour à tous,

Je développe en php4/php5 et je bloque sur un cas concret :

J'ai un array qui contient des valeurs (1, 3, 5, 10) et je voudrais décomposer un nombre en fonction de ces valeurs, par exemple :

4 = 1*3 + 1*1
8 = 1*5 + 1*3
7 = 1*5 + 2*1
15 = 1*10 + 1*5

Plus je cherche et plus me perd dans toutes les fonctions disponibles.

Si quelqu'un pouvait me venir en aide, ce serait très sympa

A+
Robi
Robi49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 13h59   #2
Membre éclairé
 
Avatar de humitake
 
Homme Olivier
Étudiant
Inscription : novembre 2010
Messages : 303
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 20
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2010
Messages : 303
Points : 384
Points : 384
Bonjour, il y a peut être plus simple mais j'aurais fait ainsi :
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$monNombre = 25;
$res = $monNombre . ' = ';
$tab = array(1, 3, 5, 10);
for($i = sizeof($tab)-1; $i >= 0; $i--){
    $division = $monNombre / $tab[$i];
    if($division >= 1){
        $diviseur = explode('.', $division);
        $res .= $tab[$i] . '*' . $diviseur[0] . ' + ';
        $monNombre -= ($tab[$i] * $diviseur[0]);
    }
}
if($monNombre > 0)
    $res .= $monNombre;
else
    $res = substr ($res, 0, strlen($res) - 3);
 
echo $res;
humitake est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 18h17   #3
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Il est possible de faire aussi comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
 
function decompose($value, array $factors) {
   $result = array();
   rsort($factors);
 
   foreach($factors as $factor) {
      if ($value) {
         if ($factor <= $value) {
            $result[] = '(' . floor($value / $factor) . ' * ' . $factor . ')';
            $value %= $factor;
         }
      }
      else {
         break;
      }
   }
   // si la valeur a été totalement décomposée -> on renvoie la chaine de décomposition
   return ($value) ? null : implode(' + ', $result);
}
 
$factors = array(1, 5, 10, 3);
$a = decompose(15, $factors);
$b = decompose(7, $factors);
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h23.


 
 
 
 
Partenaires

Hébergement Web