Processing math: 100%

المپدیا

دانش‌نامه‌ی المپیاد کامپیوتر ایران

ابزار کاربر

ابزار سایت


سوالات المپیاد:مرحله ی دوم:دوره ی ۳۴:سوال ۱۱

سوال ۱۱

یک عدد صحیح نامنفی را زیبا می‌نامیم اگر هم مضربِ 3 باشد و هم در نمایش دودوییِ آن، دو رقمِ یکِ متوالی وجود نداشته باشد. مثلا عددِ 9 زیبا است چون هم مضربی از 3 است و هم در نمایش دودویی آن (1001)، هیچ دو رقم یکی مجاور نیستند. چند عدد زیبا در بازه‌ی [0,1023] (شامل خود 0 و 1023) وجود دارد؟

  1. 48
  2. 54
  3. 38
  4. 46
  5. 30

پاسخ

گزینه (1) درست است.

تعداد اعداد n بیتی (0 تا 2n1) که زیبا هستند را f(n) می‌نامیم. برای یافتن این تعداد، از رابطه‌ای بازگشتی استفاده می‌کنیم.

برای محاسبه‌ی تعداد اعداد زیبای n بیتی، ابتدا n2 بیت اول را طوری مقداردهی می‌کنیم که دو بیت پشت سر هم 1 نداشته باشند، سپس 2 بیت آخر را طوری مقداردهی می‌کنیم که عدد حاصل به 3 بخش‌پذیر باشد. باقی‌مانده‌ی دو بیت آخر به 3، با مشخص شدن سایر n2 بیت تعیین می‌شود.

  1. اگر باقی‌مانده‌ی آن‌ها می‌بایست 0 می‌بود، این دو بیت باید 00 باشند (اگر 11 باشند دو بیت یک پشت سر هم داریم).
  2. اگر باقی‌مانده‌ی آن‌ها می‌بایست 1 می‌بود، این دو بیت باید 01 باشند.
  3. اگر باقی‌مانده‌ی آن‌ها می‌بایست 2 می‌بود، این دو بیت باید 10 باشند.

در این حالت اگر بیت قبلی 1 باشد، عدد حاصل زیبا نیست و باید تعداد این حالات را با استفاده از اصل متمم کم کنیم. در این حالت 4 بیت آخر عدد به شکل 0110 است که چون باقی‌مانده بر 3ی آن صفر است، n4 بیت قبلی تشکیل یک عدد زیبا می‌دهند. پس تعداد این حالات برابر با f(n4) است.

اگر تعداد روش‌هایی که می‌توان n بیت را با صفر و یک مقداردهی کرد که دو بیت پشت سر هم 1 نداشته باشد، را g(n) بنامیم، برای به دست آوردن مقدار g(n)، کافی است مقدار بیت آخر را مشخص کنیم. اگر برابر با 0 باشد، بقیه‌ی بیت‌ها به g(n1) حالت و اگر برابر با 1 باشد، بیت بعدی باید برابر با 0 و بقیه‌ی بیت‌ها به g(n2) حالت انتخاب شوند. بنابراین می‌توان نوشت:

g(n)=g(n1)+g(n2)

با شرایط اولیه: g(0)=1 و g(1)=2.

این رابطه برابر است با:

g(n)=Fib(n+1)

با Fib(0)=Fib(1)=1.

حال برای به دست آوردن f(n) طبق بررسی‌های بالا داریم:

f(n)=g(n2)f(n4)=Fib(n1)f(n4)

با شرایط اولیه:

f(0)=f(1)=f(2)=1,f(3)=2

و برای مقادیر بیشتر:

f(4)=2,f(5)=4,f(6)=7,f(7)=11,f(8)=19,f(9)=30,f(10)=48

در نتیجه، از آن‌جا که 1023=2101، پاسخ مسئله برابر با f(10)=48 است.


ابزار صفحه