Решение задачи Пасьянс старухи Шапокляк с Acmp

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


На столе лежат колоды игральных карт. В самой тоненькой колоде – p карт, во второй – p+1, в третьей – p+2, …, в последней – k карт. Старуха Шапокляк раскладывает пасьянс. Беря в руки любую из колод, она, если число карт в ней четное, на место возвращает колоду, наполовину уменьшив число карт в ней (лишние убирает в ящик), а если количество карт в колоде нечетное, то утраивает их количество и добавляет еще одну карту, а уже тогда кладет колоду на стол (карт у нее в ящике для этой операции достаточно). Если в какой-то колоде остается две карты, она больше ее не трогает. Пасьянс сходится, если во всех колодах остается по две карты.

Требуется написать программу, которая определит сходится ли пасьянс, и если сходится – сколько раз должна старуха Шапокляк брать со стола карты.

Код

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int p, k, res = 0;
    cin >> p >> k;
    for(int i = p; i <= k; ++i){
        int t = i;
        while(t != 2){
            if(t % 2)
                t = t * 3 + 1;
            else
                t/=2;
            ++res;
        }
    }
    cout << res;
    return 0;
}

         

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



Комментарии

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