Sign in
or
Register
Courses
Textbook
Compiler
Contests
Topics
Courses
C#. Bases
sous-programmes. récursivité
Module:
sous-programmes. récursivité
Problem
11
/12
Itération sur les lignes
Theory
Click to read/hide
Tâche
Dans l'alphabet de la langue de la tribu "Tumba-Yumba" ; quatre lettres : "K", "L", "M" et "N". Vous devez afficher tous les mots composés de
n
lettres qui peuvent être construits à partir des lettres de cet alphabet.
Le problème est un problème normal de force brute qui peut être réduit à un problème plus petit.
Nous substituerons séquentiellement des lettres au mot.
La première position d'un mot peut être l'une des 4 lettres de l'alphabet (K. L, M, N).
Mettons la lettre
K
en premier. Ensuite, afin d'obtenir toutes les variantes avec la première lettre
K
, vous devez énumérer toutes les combinaisons possibles de lettres dans les positions
n - 1
restantes et ainsi de suite. (voir photo).
Ainsi, le problème se réduit à résoudre quatre problèmes de longueur
n - 1
.
Itérer sur n caractères de manière récursive
w[0]='K'; // itération sur les derniers L-1 caractères w[0]='L'; // itération sur les derniers L-1 caractères w[0]='M'; // itération sur les derniers L-1 caractères w[0]='N'; // itération sur les derniers L-1 caractères
w
- une chaîne de caractères qui stocke le mot de travail.
Ainsi, nous avons obtenu la
récursivité.
Nous pouvons organiser la solution du problème sous la forme d'une procédure récursive.
Reste à déterminer quand la récursivité prendra fin ? Lorsque tous les caractères sont définis, c'est-à-dire que le nombre de caractères définis est
n
. Dans ce cas, vous devez afficher le mot résultant à l'écran et quitter la procédure.
Le programme C# ressemblera à ceci.
//
w - paramètre modifiable
(string-result) // La procédure TumbaWords reçoit l'alphabet sous forme de chaîne de caractères, // le mot mot et le nombre de caractères déjà définis (au début – 0) static void TumbaWords( string A, ref string w, int N ) { if (N == w.Length) // w.Length - le nombre de caractères dans la chaîne { // si tous les caractères ont déjà été définis pour le mot, // alors il faut sortir une chaîne et terminer la procédure Console.WriteLine(w); retour; } for ( int i = 0; i < w.Length; i ++ ) // si la condition ci-dessus est fausse (c'est-à-dire que tous les caractères ne sont pas espacés, { // si la condition ci-dessus est fausse (c'est-à-dire que tous les caractères ne sont pas espacés, // puis dans la boucle on parcourt tous les caractères de l'alphabet et // place alternativement le caractère sur la première case libre w += A[i] ; TumbaWords(A, ref w, N+1); w = w.Remove(w.Length - 1); // puis supprimer le dernier caractère ajouté, // pour créer un nouveau mot avec le même préfixe } } vide statique Main() { int n = Convert.ToInt32(Console.ReadLine()); mot de chaîne = ""; TumbaWords("KLMN", mot de référence, 0); }
NOTEZ
que
w
est un paramètre modifiable (chaîne de résultat) !
Problem
Dans l'alphabet de la langue de la tribu «tumba-yumba» quatre lettres : "K", "L", "M" et "N". Vous devez afficher tous les mots composés de
n
lettres pouvant être construites à partir des lettres de cet alphabet.
(c) K.Yu. Polyakov
1000
ms
256 Mb
Rules for program design and list of errors in automatic problem checking
Teacher commentary