В каждом дереве 2^n узлов. Поскольку надо найти наименьшее количество деревьев, надо разбить число 2947 на слагаемые, которые представляют собой степени двойки, причем каждое новое отделяемое слагаемое должно быть максимальной степенью двойки, "влезающей" в остаток. Количество слагаемых будет являться ответом.
2947 = 2048 + 899 = 2048 + 512 + 387 = 2048 + 512 + 256 + 131 = 2048 + 512 + 256 + 128 + 3 = 2048 + 512 + 256 + 128 + 2 + 1
Ответ: 6.
Иными словами, переводим число 2947 в двоичную систему и считаем количество единиц в записи числа.
Чисто математически:
11x+7y=4228
7y=4228-11x
y=604-(11x)/7.
Отсюда выбираем x-ы, кратные 7 и не превышающие 604/11 - примерно 55 - чтобы y был натуральным числом.
x: 7, 14, 21, 28, 35, 42, 49.
y: 527, 450, 373, 308, 219, 142, 65.
Таким образом получается 7 пар чисел.
Блок-схема алгоритма - в прилагаемом файле.
А) 101 0100 1010(2)=2^10+2^8+2^6=1024+256+64=1354
б) BABA(16)=11*16^3+10^16^2+11*16+10=47802
в) 110 00110110(2)=2^10+2^9+2^5+2^4+2^2+2=1024+512+32+16+4+2=1590
г) CACA(16)=12*16^3+10*16^2+12*16+10=51914
Int a[5][7];
...
int s = 0;
for (int i = 0; i < 5; ++i)
for (int j = 0; j < 7; ++j)
s += a[i][j];
std::cout<<s;