Решение задачи "Double Cola" с Codeforces

Без пояснения   Просмотров: 15


Шелдон, Леонард, Пенни, Раджеш и Говард стоят в очереди к автомату по продаже баночек с напитком «Double Cola», других людей в очереди нет. Первый в очереди (Шелдон) покупает баночку, выпивает ее содержимое и раздваивается! Получившиеся два Шелдона встают в конец очереди. Затем следующий в очереди (Леонард) покупает баночку, выпивает и встает в конец очереди в двойном экземпляре, и так далее. Этот процесс продолжается до бесконечности.

Например, третью баночку колы выпьет Пенни, и очередь будет выглядеть так: Раджеш, Говард, Шелдон, Шелдон, Леонард, Леонард, Пенни, Пенни.

Напишите программу, которая выведет имя человека, выпившего n-ую баночку.

Обратите внимание, что в самом начале очередь выглядит так: Шелдон, Леонард, Пенни, Раджеш, Говард. Первым человеком является Шелдон.

Код

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n, p = 0;
    cin >> n;
    if(n <= 5){
        if(n == 1)
            cout << "Sheldon";
        else if(n == 2)
            cout << "Leonard";
        else if(n == 3)
            cout << "Penny";
        else if(n == 4)
            cout << "Rajesh";
        else if(n == 5)
            cout << "Howard";
        return 0;
    }

    while(5 * pow(2, p) <= n){
        n -= 5 * pow(2, p);
        ++p;
    }

    int res = n/pow(2, p);
  
  if(res == 0)
        cout << "Sheldon";
    else if(res == 1)
        cout << "Leonard";
    else if(res == 2)
        cout << "Penny";
    else if(res == 3)
        cout << "Rajesh";
    else
        cout << "Howard";
    return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться