Чтобы ваш текущий код сгенерировал 222, 555, 888, вы забыли переустановить times
.
Возможно, вы создали вспомогательную функцию для уточнения:
int mul_by_111(int n) // { return 111 * n; }
{
int sum = a;
int times = 1;
for (int i = 1; i < 3; ++i) {
times *= 10;
sum += a * times;
}
return sum;
}
int main()
{
int arr[] = {2, 5, 8};
for (int a:arr){
std::cout << mul_by_111(a) << std::endl;
}
}
Если вы хотите, чтобы декартово произведение отображало 222, 225, 228, 522, .., 888
Вы можете (наивно) сделать это с 3 циклами:
int main()
{
int arr[] = {2, 5, 8};
for (int a:arr){
for (int b:arr){
for (int c:arr){
std::cout << a << b << c << std::endl;
}
}
}
}
Некоторые библиотеки, например range-v3 , предлагают cartesian_product
, чтобы сделать его еще проще:
for (auto t : ranges::view::cartesian_product(arr, arr, arr)) {
std::cout << std::get<0>(t) << std::get<1>(t) << std::get<2>(t) << std::endl;
// std::apply([](auto... args){ (std::cout << ... << args) << std::endl; }, t); // C++17
}