Module: Itérer sur tous les sous-modèles d'un masque donné


Problem

1 /7


Chaînes binaires de longueur donnée

Theory Click to read/hide

Il arrive qu'il soit nécessaire d'énumérer toutes les séquences de bits d'une certaine longueur. Ou en d'autres termes, itérer sur toutes les options possibles, où pour chaque objet l'un des deux états possibles est sélectionné.

Dans de telles situations, il est possible de mettre en œuvre une énumération à l'aide de masques de bits. L'avantage de cette approche est qu'un tel code fonctionne de manière non récursive et opère sur des nombres au lieu de collections ou similaires, ce qui améliore considérablement les performances.

Le code général utilisant des masques de bits est donné ci-dessous : international ; // nombre d'oobjects (longueur de la séquence de bits) for (int mask = 0; mask < (1 << n); mask++) { // boucle sur tous les nombres de 0 à 2^n - 1, où chaque nombre correspond à un masque de bits // le masque de nombre actuel est un masque de bits, où le ième bit spécifie l'état du ième objet for (int i = 0; i < n; i++) { // itération sur n bits pour comprendre l'état de chaque objet if ((1 << i) & mask) { // vérifie si le i-ème bit est égal à un // traite l'option selon laquelle le i-ème objet a l'état '1' } else { // cas où le i-ième bit est zéro // traite l'option que le i-ème objet de l'état '0' } } }
Ce code s'exécute en O(2^n * f(n)), où f(n) est le temps qu'il vous faut pour traiter un itérable particulier.

Problem

Le nombre N donné affiche toutes les chaînes de longueur N composées de zéros et de uns dans l'ordre lexicographique.

Pour résoudre le problème, utilisez l'énumération de tous les sous-modèles.

Entrée

Un seul nombre N est donné. (naturel, 1 ≤ N ≤ 10)

Sortie

Il est nécessaire d'imprimer toutes les chaînes de longueur N composées de zéros et de uns dans l'ordre lexicographique, une par ligne

2
00 01 dix 11
Entrée Sortie