المپدیا

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

ابزار کاربر

ابزار سایت


سوالات المپیاد:دوره ی تابستان:دوره ی ۲۲:برنامه نویسی:سوال ۲

سوال ۲

در برنامه‌های زیر شما باید کد بنویسید یا تحلیل کنید. کدی که می‌نویسید باید خلاصه و مختصر مفید باشد. اگر includeها بدیهی و مرسوم هستند، نیازی به نوشتن آن‌ها نیست و فقط بخش‌های لازم را بنویسید. اگر قرارست تحلیل کنید هم در حد یک پارگراف توضیح دهید. در هیچ برنامه‌ای مجاز به استفاده از امکاناتی که در کلاس تدریس نشده، نیستید.

  1. تابعی بنویسید که یک عدد int را بگیرد و جای مقدارهای بایت‌های دوم و سوم (دو بایت وسط) آن را با هم عوض کند. در این تابع شما مجاز به استفاده از عملگرهای تقسیم یا باقی‌مانده یا ضرب یا شیفت بیتی نیستید. تابع شما چیزی بر نمی‌گرداند بلکه خود عدد را عوض می‌کند. حداکثر هم سه متغیر جدید می‌توانید تعریف کنید.
  2. برنامه‌ای بنویسید که یک عدد int x بخواند و تعداد اعداد کوچکتر از $۲۳۰$ای مثل z که در آن z == (z&x) هستند را چاپ کند. برنامه شما نباید از $(۲۳۰)O$ باشد.
  3. حروف A و E و I و O و U حروف صدادار زبان انگلیسی هستند و ۲۱ حرف دیگر بی‌صدا هستند. یک خط دستور بنویسید که برای حرف بی‌صدای char x در متغیر int k ذخیره کند که x چندمین حرف بی‌صدا است؟ برای مثال B اولین کاراکتر بی‌صدا و Y بیستمین حرف بی‌صدا است. دستور شما نباید سمی‌کالن یا کامای اضافه داشته باشد و طول آن هم نباید خیلی (در حد دونه دونه شماردن! یا کپی پیست کردن یک تکه به ازای هر کدام از حرف‌های صدادار) طولانی باشد.
  4. مقدار long long m = 1LL«32 چیست؟ اگر LL را ننویسیم این مقدار چند می‌شود؟ فرض کنید بعد از این خط ما (در حالت با LL) دستور long long z = x & (m-(x+1)); را نوشته‌ایم که در آن x یک متغیر long long کوچکتر از $230$ است. در این‌صورت مقدار z چه‌چیزی را در خود دارد؟
  5. برنامه‌ای بنویسید که یک عدد $n$ و سپس $n$ سه تایی مختصه (صحیح) بگیرد. این $n$ نقطه در فضای سه بعدی تعریف شده و می خواهیم‌ خود نقاط را بر حسب فاصله از مبدأ مختصات به‌صورت نزولی مرتب کرده و چاپ کنیم. شما حداکثر یک آرایه می‌توانید بگیرید و مجاز به تعریف struct نیستید. برای مرتب‌سازی حتماً باید از تابع sort خود زبان استفاده کنید.
  6. می‌گوییم کلمه‌ی الف از کلمه‌ی ب خوشگل‌تر است اگر تعداد Aهای رشته الف بیشتر از رشته ب باشد. در صورت تساوی مقایسه بر روی تعداد Bها انجام می‌شود و … الی روی Zها. برای مثال PAA از DAST خوشگل‌تر است و AFTAB از MAHTAB خوشگل‌تر است. برنامه‌ای بنویسید که یک $n$ و سپس $n$ تا کلمه با حروف بزرگ بخواند و آن ها را به ترتیب خوشگلی مرتب‌کرده و سپس چاپ کند. شما مجاز به تعریف تابع یا آرایه یا بیش‌از یک بار استفاده از sort یا انجام sort به‌صورت دستی (غیر از sort خود C++) نیستید.
  7. برنامه‌ی کاملی بنویسید که دو عدد حداکثر ۱۰۰۰ رقمی را از ورودی بخواند و باقی‌مانده‌ی تقسیم عدد اول بر عدد دوم را در خروجی چاپ کند. برای این‌کار شما تنها مجاز به انجام عمل ضرب و روش باینری‌سرچ هستید.

ابزار صفحه