من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

پاسخ سوال اتل متل توتوله کوئرا

پاسخ سوال اتل متل توتوله کوئرا
پاسخ سوال اتل متل توتوله کوئرا

پاسخ سوال اتل متل توتوله کوئرا

در این نوشته تمرین “اتل متل توتوله” که در وب‌سایت کوئرا موجود است را برای شما کاربران عزیز حل کرده‌ایم.

 

پاسخ سوال اتل متل توتوله کوئرا

محمد و عرفان بعد از این که با روشی عجیب فهمیدند ذهن‌هایشان خیلی از هم فاصله دارد با روشی عجیب‌تر اقدام به رفع فاصله اذهانشان کردند! آن‌ها به همراه  تا از دوستانشان بازی اتل‌متل‌توتوله را انجام می‌دهند. (توجه کنید که در مجموع n نفر هستند) حالا عرفان که به نظرش این بازی خیلی مسخره است از شما می‌خواهد برنامه‌ای بنویسید که نتیجه بازی را در هر مرحله بگوید. به طور دقیق‌تر در هر مرحله از بازی یک شعر که کلمه دارد خوانده می‌شود و بعد از گفتن هر کلمه، از یک پا به پای بعدی می‌رویم، در صورتی هم که به پای آخر برسیم، دوباره از اول شروع می‌کنیم. در آخر هر مرحله هم پایی که آخرین کلمه روی آن خوانده شده حذف می‌شود. توجه کنید که هر فرد دو پا دارد و اولین پا، پای نفر شماره ۱ است. حال برنامه شما باید در  خط (تعداد مراحل بازی که طول می‌کشد تا فقط یک پا باقی بماند) روند جلو رفتن هر مرحله را چاپ کند (برای فهم بهتر مثال‌ها را ببینید). در آخر هم برنده بازی را مشخص کند.

نکته: توجه کنید در حالتی که در آخر هر دو پای یک نفر باقی بماند، نباید مرحله آخر را چاپ کنید و برنده مشخص می‌شود.

 

ورودی سوال اتل متل توتوله

به شما دو عدد و  داده می‌شود که نشان دهنده تعداد بازی کنان و تعداد کلمات شعر است (یعنی با شروع از پای اول  تا پا به جلو می‌رود و آن را ورمیچیند!)

 

خروجی سوال اتل متل توتوله

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

 

حل سوال اتل متل توتوله

#include <bits/stdc++.h>
using namespace std;
 
 
int main()
{
    int n, k;
    cin >> n >> k;
    vector<int> pa;
    for(int i=1; i<= 2*n; i++)
        pa.push_back((i+1)/2);
    
    int curr = 0, cu;
    while((int)pa.size() > 1)
    {
        cout << pa[curr] << " ";
        for(int i=1; i<k; i++)
        {
            cu = (curr+i)%(int)pa.size();
            cout << pa[cu] << " ";
        }
        curr = cu;
        cout << endl;
        pa.erase(pa.begin() + curr);
        if(curr == pa.size()) curr = 0, cu = 0;
        if((int)pa.size() == 2 && pa[0] == pa[1])
            break;
    }
    
    cout << "winner:" << pa[0] << endl;
    return 0;
}

منبع سوال‌: وب‌سایت کوئرا

 

اگر روش حل بهتری برای “تمرین اتل متل توتوله” دارید برای ما ارسال کنید تا با نام خودتان به اشتراک بگذاریم.

اگر سوال خاصی را مدنظر دارید در بخش نظرات برای ما ارسال کنید تا حل آن سوال را در الویت محتوای سایت بگذاریم.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]