لینکهای مفید برای شرکت در مسابقه:
در دو سوال اول شما باید با توجه به سوال برنامهای بنویسید که وظیفه گفته شده را انجام دهد. برای دو سوال آخر هم بهترین جوابی را که میتوانید بنویسید و در قالب یک فایل PDF آپلود کنید.
موفق باشید!
این یک سوال آمار و احتمال است، ولی شما باید روشی الگوریتمی برای حل آن بیابید و برنامهی روشتان را پیادهسازی کنید!
فرض کنید تابع rand8
تابعی است که هر بار صدایش میکنیم، با احتمال برابر، یک عدد صحیح بین ۰ تا ۷ خروجی میدهد. میخواهیم تابع rand11
را با استفاده از rand8
بسازیم طوری که با احتمال برابر، یک عدد صحیح بین ۰ تا ۱۰ خروجی دهد. روش ساخت باید کاملا قطعی و غیراحتمالاتی باشد.
برنامهی شما باید ورودی را از ورودی استاندارد دریافت کند و در خروجی استاندارد بنویسد.
برنامهی شما ابتدا یک عدد دریافت میکند که یعنی برنامهی شما باید بار مستقل از هم مسئله را حل کند، که در هر بار قرار است با داشتن خروجی ۱۰۰ بار صدا کردن یک تابع ثابتrand8
، یک عدد تصادفی با تابع rand11
تولید شود. توجه کنید در دفعات مختلف، ممکن است تابع rand8
رفتارهای مختلف داشته باشد و برنامهی شما باید با توجه به رفتار آن خروجی دهد.
مثلا اگر ، یعنی ۴ تابع بعنوان rand8
داریم. سپس به ترتیب، خروجی ۱۰۰ بار اجرای هریک از این توابع در ورودی شما آمده است (مجموعا ۴۰۰ عدد). سپس شما باید ۴ عدد خروجی دهید که هر یک از آنها، خروجی تابع rand11
شما با توجه به مقادیر دریافتی است.
توجه کنید که الگوریتم تابع rand11
شما نباید در تست مختلف تفاوت کند؛ شما باید یک تابع طراحی کنید و بر اساس همان همهی تستها را پاسخ دهید. اما ممکن است تابع rand8
در تستهای مختلف متفاوت رفتار کند، و حتی گاهی اوقات اشتباه کار کند! اگر تابع rand8
اشتباه باشد و احتمال اعداد خروجیاش برابر نباشد، لزومی ندارد توزیع اعداد خروجی شما درست باشد. سامانهی داوری با دادن توابع rand8
مختلف، قطعی و غیر احتمالاتی بودن روش شما را میسنجد.
در خط اول ورودی مقدار آمده است. سپس در خط بعدی، در هر خط ۱۰۰ عدد بین ۰ تا ۷ آمده است هر خط خروجیهای یک تابع rand8
است.
در سطر مقادیر خروجی تابع rand11
طراح شده به ازای هر یک از rand8
ها را چاپ کنید.
توجه کنید که خروجی این سوال یکتا نیست و خروجی درست در این سوال معنا ندارد؛ سامانهی داوری با توجه به رفتار برنامهی شما با توجه به خروجیهای مختلف، درست بودن روشتان را میسنجد.