لینکهای مفید برای شرکت در مسابقه:
برای تست کردن برنامههایتان نیازی به استفاده از کامپایلرهای جدید نیست و میتوانید با ثبتنام رایگان در اینجا، از ویرایشگر سمت چپ این تمرین برای اجرای کدهایتان استفاده کنید.
در صورت بروز مشکل آن را از طریق قسمت "سوال بپرسید" مطرح کنید. زبانهای سوالات را میتوانید در کنار اسم آنها مشاهده کنید.
سری سوم و آخر سوالات ساعت ۱۷:۰۵ دوشنبه قرار میگیرد،
پشتیبانی مسابقه از ساعت ۱۶ الی ۱۹ و ۱۱ الی ۱۴ هر روز است.
علی به تازگی با برنامه نویسی آشنا شده است و برای همین ذوق خاصی دارد. از این رو میخواهد سیستمی طراحی کند که یک لیگ فوتبال را شبیه سازی میکند.
در این سیستم، دستورات مختلفی وجود دارند که به شرح زیر میباشند:
این دستور، بازیکنی با نام name
، قیمت price
، سرعت speed
، قدرت تمامکنندگی finishing
و دفاع defence
میسازد.
توجه کنید که name
از جنس رشته، و باقی پارامترها از جنس عدد میباشند.
هر بازیکن، یک شناسهی عددی دارد که با استفاده از آن میتوان به آن بازیکن دسترسی داشت، اولین بازیکنی که ساخته میشود شناسهی عددی ۱، دومین بازیکنی که ساخته میشود شناسهی عددی ۲ و -امین بازیکنی که ساخته میشود شناسهی عددی دارد.
با استفاده از این دستور، میتوانید یک تیم جدید با نام name
و پول money
بسازید. در صورتی که از قبل تیمی با اسم name
وجود داشته باشد، تیم جدیدی ساخته نمیشود.
همچنین name
از جنس رشته و money
از جنس عدد میباشد.
هر تیم، یک شناسهی عددی دارد که با استفاده از آن میتوان به آن تیم دسترسی داشت، اولین تیمی که ساخته میشود شناسهی عددی ۱، دومین تیمی که ساخته میشود شناسهی عددی ۲ و -امین تیمی که ساخته میشود شناسهی عددی دارد.
با استفاده از این دستور، تیم با شناسهی عددی teamID
بازیکن با شناسهی عددی playerID
را میخرد.
همچنین همانطور که در بالا گفته شد، هر بازیکن یک قیمت (price) دارد و هر تیمی مقداری پول money
دارد و هنگام خرید یک بازیکن باید تیم مورد نظر پول کافی را برای خرید بازیکن داشته باشد و در صورتی که خرید موفقیت آمیز باشد، از پول تیم، به میزان قیمت بازیکن مورد نظر کم میشود.
توجه کنید که در امر خرید بازیکن ممکن هست حالتهای مختلفی پیش بیاید:
playerID
وجود نداشته باشد، باید عبارت player with the id playerID doesnt exist
را چاپ کنید.teamID
وجود نداشته باشد، باید عبارت team with the id teamID doesnt exist
را چاپ کنید.the team cant afford to buy this player
را چاپ کنید.player already has a team
را چاپ کنید.در صورتی که هیچکدام از حالت های بالا پیش نیایند، با موفقیت بازیکن مورد نظر خریداری میشود و باید عبارت player added to the team succesfully
را چاپ کنید.
توجه کنید که ممکن است چندین مورد از حالتهای بالا پیش بیایند، در این صورت شما باید اولین حالتی که پیش میآید را در نظر گرفته و خروجی مورد نظر را چاپ کنید و از بقیه حالتها صرف نظر کنید.
برای فروش بازیکن میتوان از دستور بالا استفاده کرد. با استفاده از این دستور، تیم با شناسهی عددی teamID
بازیکن با شناسهی عددی playerID
را به فروش میرساند.
همچنین موقع فروش بازیکن ممکن است حالتهای مختلفی پیش بیایند:
teamID
وجود نداشته باشد، باید عبارت team doesnt exist
را چاپ کنید.playerID
در آن تیم وجود نداشته باشد، باید عبارت team doesnt have this player
را چاپ کنید.در صورتی که حالتهای بالا پیش نیایند، یعنی با موفقیت بازیکن مورد نظر فروخته شده است و این بازیکن دیگر به تیمی تعلق ندارد (ممکن است در آینده توسط تیمی خریداری شود). در این حالت به اندازهی قیمت بازیکن فروخته شده، به پول تیم مورد نظر افزوده میشود. همچنین در این حالت باید عبارت player sold succesfully
را چاپ کنید.
با استفاده از این دستور، دو تیم با شناسههای عددی teamID1
و teamID2
با یکدیگر بازی میکنند.
همچنین ممکن است در اجرای این دستور، حالتهای مختلفی پیش بیاید:
team doesnt exist
را چاپ کنید.the game can not be held due to loss of the players
را چاپ کنید.در صورتیکه هیچکدام از مشکلات بالا پیش نیاید، بازی با موفقیت انجام میشود.
در ابتدا برای توصیف روند بازی، نیاز به تعریف پارامتر قدرت برای هر تیم داریم.
قدرت تیم اول (تیم با شناسهی عددی teamID1
) برابر است با مجموع سرعت و تمامکنندگی ۱۱ بازیکن اول آن تیم.
همچنین قدرت تیم دوم (تیم با شناسهی عددی teamID2
) برابر است با مجموع سرعت و دفاع ۱۱ بازیکن اول آن تیم.
توجه کنید که ترتیب بازیکنها در یک تیم، همان ترتیب زمانی اضافه شدن آنها به تیم میباشد.
در صورتی که قدرت دو تیم باهم برابر نباشد، تیمی برندهی بازی میشود که قدرت بیشتری دارد و به تعداد بردهای تیم برنده یک واحد اضافه میشود و به تعداد باختهای تیم بازنده نیز یک واحد اضافه میشود و به تیم برنده، به عنوان جایزه ۱۰۰۰ واحد پول داده میشود. در صورتی که قدرت دو تیم برابر باشد، بازی مساوی میشود و تعداد مساویهای هر دو تیم یک واحد افزایش پیدا میکند.
با استفاده از دستور بالا، باید جدول رتبهبندی تیمها را چاپ کنید.
شما باید تیمها را بر اساس تعداد بردها (هر تیمی که برد بیشتری داشته باشد رتبه بهتری دارد)، و در صورت برابری تعداد بردها، بر اساس تعداد باختهای کمتر مرتب کنید (اگر دو تیم بردهای برابری داشته باشند، تیم با باخت کمتر رتبه بهتری میگیرد) و به صورت زیر نام آنها را چاپ کنید:
که در آن teamName[0]
تیم با رتبهی ۱، teamName[1]
تیم با رتبهی ۲ و... میباشند.
توجه کنید که تعداد مساویها مهم نمیباشد و همچنین اگر دو تیم تعداد باختها و بردهایشان برابر بود، تیمی که شناسهی عددی کمتری دارد رتبهی بهتری میگیرد.
در انتها، پس از تمام شدن لیگ، عبارت بالا در خروجی داده میشود و به این معنی است که ورودیها تمام شده است و برنامه شما نیز پایان مییابد.
ورودی شامل چندین خط میباشد که در هر خط یکی از دستوراتی که در صورت سوال گفته شد، داده میشود.
همچنین در خط آخر ورودی، دستور end
داده میشود.
توجه کنید که ممکن است در ورودی داده شده، بعضی از خط ها خالی باشند و هیچ دستوری در آنها نباشد.
پس از اجرای برخی از دستورها، باید خروجیهایی را چاپ کنید که در توضیحات هر دستور در صورت نیاز گفته شده است. توجه کنید که هر خروجی باید در یک خط چاپ شود و از چاپ تمامی خروجیها در یک خط پرهیز کنید.