Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
#1

Codeforces.Double Cola - C++

03.12.2013, 20:46. Просмотров 992. Ответов 11
Метки нет (Все метки)

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

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

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

Обратите внимание, что в самом начале очередь выглядит так: Шелдон, Леонард, Пенни, Раджеш, Говард. Первым человеком является Шелдон.
Пробовал решать сам, затем посмотрел разбор, но все равно не получилось. Надеюсь на помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Codeforces.Double Cola (C++):

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double - C++
Думаю из-за polp #include<iostream> #include<cmath> #include<cstdlib> using namespace std; double polp(double af,double...

Ошибка: error LNK2001: unresolved external symbol "double __cdecl Akk(double,double,double)" - C++
#include <iostream> #include <cmath> using namespace std; double Akk(double x, double y, double z); int main() { int a, b, c; ...

Почему мы пишем double x (double y)? а не через запятую double x,y - C++
почему мы пишем double x (double y)? а не через запятую double x,y

Codeforces, 456B - Федя и математика - C++
Страница задачи на codeforces.com Федя учится в гимназии. Домашнее задание по математике у Феди состоит в вычислении следующего...

Исправить ошибки "cannot convert 'double (*)(double)' to 'double'" и "too many arguments to function" - C++
пожалуйста проверьте и помогите исправить ошибки: #include<iostream> #include<stdio.h> #include<math.h> #include<stdlib.h> ...

Почему перестает работать программа при замене double на long double? - C++
Здравствуйте! Прошу помощи чтобы разобраться в следующем вопросе: Нашел программу в интернете, запустил - все работает, но когда решил...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
05.12.2013, 19:37  [ТС] #2
Пожалуйста помогите решить!
hwmlex
41 / 41 / 3
Регистрация: 30.01.2013
Сообщений: 133
05.12.2013, 20:27 #3
Довольно легко реализуется через deque. Попробую сейчас написать.
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
05.12.2013, 20:33 #4
hwmlex, надо бы на ограничения глянуть.Может так получиться, что номер баночки будет довольно большим => дек может разрастись до таких размеров, что будет вылетать по ML
hwmlex
41 / 41 / 3
Регистрация: 30.01.2013
Сообщений: 133
05.12.2013, 20:34 #5
ТС, какие ограничения на N?
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
05.12.2013, 20:42 #6
сначала очередь из пяти человек
1
2
3
4
5
потом из 10
1
1
2
2
3
3
4
4
5
5
потом из 20
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
5
5
5
5
значит если число до банок до 5
то остаток от деления на 5
если от 5 до 15
то вычитаем пять( это первая очередь) остаток от деления на 10 и делим пополам
если от 15 до 35 то то вычитаем 15(первые две очереди) остаток от деления на 20 и делим на четыре
рассуждения понятны?
hwmlex
41 / 41 / 3
Регистрация: 30.01.2013
Сообщений: 133
05.12.2013, 20:49 #7
ValeryS, Они удваиваются и встают в конец очереди.
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
05.12.2013, 20:53  [ТС] #8
Ограничение n<=10^9
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
05.12.2013, 21:57 #9
примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
char * name[5]={"Шелдон", "Леонард", "Пенни", "Раджеш", "Говард"};
n--;
int m=0;
while(n>0)
{
  n-=5*pow(2.0,m);
 m++;
}
if(n==0)
 printf("Шелдон");
else
  printf("%s",name[((n%(pow(2.0,m-1)*5))/pow(2.0,m-1))]);
Добавлено через 2 минуты
Цитата Сообщение от hwmlex Посмотреть сообщение
ValeryS, Они удваиваются и встают в конец очереди.
и что?
я показал как очередь будет выглядеть после цикла
первый цикл это пять банок
второй десять и т.д
в общем случае
5*2i
i итерация цикла

Добавлено через 5 минут
пардон наврал маненько
n будет портися в цикле значит её нужно запомнить где то

Добавлено через 55 минут
проверяйте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
 
 
int main()
{
    char * name[5]={"Cheldon", "Leonard", "Penny", "Radjest", "Govard"};
    int n;
    std::cout<<"enter namber"<<std::endl;
    std::cin>>n;
    
    while(n>0)
    {
    int s=5;
    int r=1;
    int k=0;
    while(n-s>0)
    {
           k=s;
    r*=2;
    s+=r*5;  
    }
    std::cout<<name[(n-k-1)/r]<<std::endl;
    std::cout<<"enter namber"<<std::endl;
    std::cin>>n;
    }
  return 0;
}
если ввести отрицательное число или 0 выход из программы
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
07.12.2013, 20:18  [ТС] #10
Не работает. Отправил на кодфорс, там не прошел 8 тест. Пожалуйста скиньте нормальный код
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
07.12.2013, 20:25 #11
Цитата Сообщение от max_besheniy Посмотреть сообщение
Не работает. Отправил на кодфорс, там не прошел 8 тест.
что есть 8 тест?
max_besheniy
25 / 25 / 1
Регистрация: 21.11.2013
Сообщений: 208
07.12.2013, 20:29  [ТС] #12
Спасибо, уже не надо. Сам решил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2013, 20:29
Привет! Вот еще темы с ответами:

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Какая-нибудь реализация функции void Fun (double in, double *out) - C++
Подскажите, пожалуйста, какую-нибудь любую реализацию прототипа функции: void Fun (double in, double *out)

long double и double в MSVC 12 одно и тоже, нужна информация,желательно быстрей - C++
Здравствуйте все знают что в VC long double и double одно и тоже, да и при простой проверке это легко выясняется, но нужна информация от...

std::copy из vector<double> в *double, непонятный warning - C++
double myD={10,20,30,40,50,60,70}; std::vector&lt;double&gt; myvector (7); std::copy ( myD, myD+7, myvector.begin() ); std::copy (...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.12.2013, 20:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru