Во-первых, дополните минимум нулями слева, чтобы две строки были одинаковой длины.
Потом генерируйте посимвольно, считая, какие значения текущая цифра может принимать. Смотрите, если где-то вы сгенерируете цифру меньше maximum, то дальше может быть вообще что угодно. Ваше сгенеренное число уже меньше максимума. Так же с минимумом. Поэтому, поддерживайте 2 флага: "сгенрированная строка уже меньше максимума" и "сгенерированная строка уже больше минимума". Каждый следующий символ не должен превосходить цифру в максимуме, если не первый флаг. Также он не должен быть меньше минимума, если не второй флаг.
Что-то вроде этого:
bool smaller_than_max = false;
bool bigger_than_min = false;
for (int i = 0; i < n; ++i) {
int left = bigger_than_min ? '0' : minimum[i];
int right = smaller_than_max ? '9' : maximum[i];
answer[i] = left + rand() % (right - left + 1);
bigger_than_min |= answer[i] > minimum[i];
smaller_than_max |= answer[i] < maximum[i];
}
Edit: тут все возможные числа не будут равновероятны. Чтобы они были равновероятны придется хорошенько поизвращаться.