Ну в целом вам правильно в голову приходит, но вариант с двумя циклами, данный изначально, выглядит более понятным что-ли, более читаемым. Ну только счетчики переименовать можно (обычно i,j,k используют во вложенных циклах именно в таком порядке - обратный порядок сбивает с толку).
int i = 1, j = 1;
do {
std::cout << j;
if (++j > i) {
j = 1;
i++;
}
} while (i < 3);
P.S.: вообще-то можно еще с
goto поизгаляться, но это уже слишком...