Bonjour,
Je viens vers vous avec un petit challenge (qui est en fait également une question).
Je m'explique :
J'ai pris part à un concours de programmation dont l'énoncé était le suivant :
Soit X un nombre fixé par l'utilisateur, vous devez trouver le chemin le plus court démarrant 2 et allant vers ce nombre donné. Les opérations permises sont les suivantes : +2, -2, /2, *2.
J'ai fait ma propre méthode de résolution, mais je me demandais si, d'après vous, cette méthode est celle donnant le chemin (le nombre d'opérations à effectuer) le plus court.
La voici (pour ceux qui veulent tenter de résoudre le challenge évitez de lire ma résolution ) en C# :
Veuillez m'excuser si le code n'est pas optimal, je l'ai écrit rapidement.
Dans cet exemple, le chiffre à atteindre (désigné par la variable x) n'est par exemple pas demandé à l'utilisateur mais bien fixé dans le code.
Pensez vous que cette méthode de résolution donne le résultat le plus court ?
Quelle est votre méthode pour ce problème ?
Merci beaucoup pour vos réactions.
Je viens vers vous avec un petit challenge (qui est en fait également une question).
Je m'explique :
J'ai pris part à un concours de programmation dont l'énoncé était le suivant :
Soit X un nombre fixé par l'utilisateur, vous devez trouver le chemin le plus court démarrant 2 et allant vers ce nombre donné. Les opérations permises sont les suivantes : +2, -2, /2, *2.
J'ai fait ma propre méthode de résolution, mais je me demandais si, d'après vous, cette méthode est celle donnant le chemin (le nombre d'opérations à effectuer) le plus court.
La voici (pour ceux qui veulent tenter de résoudre le challenge évitez de lire ma résolution ) en C# :
Code:
static void Main(string[] args) { int x = 37; List<string> liste = new List<string>(); if (x % 2 == 1) { x *= 2; liste.Add("*"); } int y = 0; while (Math.Pow(2, y) < x) y++; int dist1 = (int)Math.Pow(2, y) - x; int dist2 = x - (int)Math.Pow(2, (y - 1)); if (dist1 < dist2) { while (x < Math.Pow(2, y)) { x = x + 2; liste.Add("+"); } } else { while (x > Math.Pow(2, (y-1))) { x = x - 2; liste.Add("-"); } } while (x != 2) { x /= 2; liste.Add("/"); } for (int i = (liste.Count - 1); i >= 0; i--) { switch (liste[i]) { case "-": Console.WriteLine("+"); break; case "+": Console.WriteLine("-"); break; case "*": Console.WriteLine("/"); break; case "/": Console.WriteLine("*"); break; } } Console.ReadLine(); }
Dans cet exemple, le chiffre à atteindre (désigné par la variable x) n'est par exemple pas demandé à l'utilisateur mais bien fixé dans le code.
Pensez vous que cette méthode de résolution donne le résultat le plus court ?
Quelle est votre méthode pour ce problème ?
Merci beaucoup pour vos réactions.
Commentaire