Module: روی همه زیر الگوهای یک ماسک داده شده تکرار کنید


Problem

1 /7


رشته های دودویی با طول مشخص

Theory Click to read/hide

این اتفاق می افتد که لازم است تمام دنباله های بیت با طول معین را برشماریم. یا به عبارت دیگر، روی همه گزینه های ممکن تکرار کنید، جایی که برای هر شی یکی از دو حالت ممکن انتخاب می شود.

در چنین شرایطی، امکان اجرای شمارش با استفاده از ماسک بیت وجود دارد. مزیت این روش این است که چنین کدهایی به صورت غیر بازگشتی کار می کنند و به جای مجموعه ها یا موارد مشابه بر روی اعداد عمل می کنند که عملکرد را تا حد زیادی بهبود می بخشد.

کد کلی با استفاده از بیت ماسک در زیر آورده شده است: intn; // تعداد اشیاء (طول دنباله بیت) برای (int mask = 0; mask < (1 << n); mask++) { // حلقه تمام اعداد از 0 تا 2^n - 1، که در آن هر عدد مربوط به یک بیت ماسک است // ماسک عدد فعلی یک بیت ماسک است، که در آن بیت i، وضعیت شیء i را مشخص می کند. برای (int i = 0; i < n; i++) { // روی n بیت تکرار کنید تا بفهمید هر شی چه حالتی دارد if ((1 << i) & mask) { // بررسی کنید بیت i برابر با یک است // گزینه ای را پردازش کنید که شی i-ام حالت '1' } else { // مورد زمانی که بیت i-امین صفر باشد // گزینه ای را پردازش می کند که شی i-ام حالت '0' } } }
این کد در O(2^n * f(n)) اجرا می شود، که در آن f(n) زمانی است که برای پردازش یک تکرار خاص طول می کشد.

Problem

عدد N داده شده تمام رشته های طول N که از صفر و یک تشکیل شده اند را به ترتیب واژگانی چاپ می کند.

در حل مسئله، از شمارش همه الگوهای فرعی استفاده کنید.

ورودی

عدد N داده شده است. (طبیعی، 1 ≤ N ≤ 10)

خروجی

لازم است تمام رشته‌های طول N متشکل از صفر و یک به ترتیب واژگانی، یک در هر خط چاپ شوند

<بدن>
ورودی خروجی
<پیش> 2 <پیش> 00 01 10 11