Module: كرر على جميع الأنماط الفرعية لقناع معين


Problem

1 /7


سلاسل ثنائية بطول معين

Theory Click to read/hide

يحدث أنه من الضروري تعداد كل متواليات البت ذات طول معين. أو بعبارة أخرى ، كرر كل الخيارات الممكنة ، حيث يتم تحديد حالة من حالتين ممكنتين لكل كائن.

في مثل هذه الحالات ، من الممكن تنفيذ التعداد باستخدام أقنعة البت. ميزة هذا النهج هي أن هذا الكود يعمل بشكل غير متكرر ويعمل على الأرقام بدلاً من المجموعات أو ما شابه ، مما يحسن الأداء بشكل كبير.

الكود العام باستخدام bitmasks موضح أدناه: إنتن. // عدد الكائنات o (طول تسلسل البت) لـ (int mask = 0؛ mask & lt؛ (1 & lt؛ & lt؛ n)؛ mask ++) {// حلقة عبر جميع الأرقام من 0 إلى 2 ^ n - 1 ، حيث يتوافق كل رقم مع قناع بت // قناع الرقم الحالي هو قناع بت ، حيث تحدد البتة i حالة الكائن من الدرجة الأولى لـ (int i = 0؛ i & lt؛ n؛ i ++) {// كرر عبر n بت لفهم الحالة التي يمتلكها كل كائن if ((1 & lt؛ & lt؛ i) & amp؛ mask) {// تحقق مما إذا كانت البتة i تساوي واحدًا // معالجة الخيار الذي يكون للكائن i-th الحالة & # 39 ؛ 1 & # 39 ؛ } else {// الحالة عندما تكون البتة i صفرية // معالجة الخيار الذي هو الكائن الأول من الحالة & # 39 ؛ 0 & # 39 ؛ } } }
يتم تشغيل هذا الرمز في O (2 ^ n * f (n)) ، حيث f (n) هو الوقت الذي تستغرقه في معالجة ملف قابل للتكرار.

Problem

مع إعطاء الرقم N ، اطبع جميع السلاسل التي يبلغ طولها N وتتكون من الأصفار والآحاد بترتيب معجمي.

في حل المشكلة ، استخدم تعداد جميع الأنماط الفرعية .

إدخال

تم إعطاء رقم مفرد N. (طبيعي ، 1 & Le؛ N & le؛ 10)

الإخراج

من الضروري طباعة جميع السلاسل ذات الطول N والتي تتكون من الأصفار والآحاد بترتيب معجمي ، واحد في كل سطر

<الجسم>
إدخال الإخراج
<قبل> 2 <قبل> 00 01 10 11
& nbsp؛