Сначала разобьем число надвое получим 13 и 11, т.к. числа записываются в порядке убывания, то не имеет значение какое число вычислять сначала итак:
разбиваем числа 13 и 11 на составляющие
4+9=13 5+6=11
5+8=13 4+7=11
6+7=13 3+8=11
2+9=11
Принципиально важно, чтоы наименьшие возможные числа располагались по наивысшим разрядам, значит число получится таким: 2949
Ответ:2949
Задачу проще всего решить, уже имея набор этих чисел, а их не так много и их можно найти в интернете)
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <long long int> armstrong = {1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, 1741725, 4210818, 9800817, 9926315, 24678050, 24678051, 88593477, 146511208, 472335975, 534494836, 912985153, 4679307774};
long long int n;
int l = armstrong.size();
cin >> n;
for (int i = 0; i < l && armstrong[i] <= n; ++i)
cout << armstrong[i] << '\n';
return 0;
}
Для краткости:
Пряник - П
Сахар - С
Миндаль - М
Заметим, что количество страниц по запросу П|С = П + С, значит количество страниц по запросу П&C = 0
количество страниц по запросу (П|С)&М = (С&M) + (П&М) - (П&С&М)
Но так как количество страниц по запросу П&C = 0, то и количество страниц по запросу П&С&М = 0.
Отсюда количество страниц по запросу (П|С)&М = (С&M) + (П&М) = 50 + 40 = 90
Ответ: 90