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 :rolleyes:) 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 :rolleyes:) 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.
from Hackademics : Forum de hacking hackers white hat cours de securite informatique, apprendre langage python, tutoriels de reverse engineering http://ift.tt/1S1MxCP
via IFTTT
Aucun commentaire:
Enregistrer un commentaire