Я хотел бы сгенерировать все возможные числа, которые имеют длину n
, и каждая цифра моего номера имеет значение из набора {1,2,...,n-1}
в виде массива. Другими словами, я хотел бы перечислить все базовые номера n
длиной n
, которые не включают 0
.Создание всех возможных массивов без вложенных циклов
Прямо сейчас, единственный способ, которым я могу думать, чтобы сделать это путем вложения п for
петель, и назначая myArray[i]
с (я + 1) -го цикла, т.е.
int n;
int[] myArray = new int[n];
for (int i1 = 1; i1 < n; i1++)
myArray[0]=i1;
for (int i2 = 1; i2 < n; i2++)
myArray[1]=i2;
// and so on....
for (int in = 1; in < n; in++)
{
myArray[n]=in;
foreach (var item in myArray)
Console.Write(item.ToString());
Console.Write(Environment.NewLine);
}
, а затем печать каждого массива в самый внутренний цикл. Очевидная проблема заключается в том, что для каждого n мне нужно вручную написать n
for
.
Из того, что я читал, рекурсия кажется лучшим способом заменить вложенные петли for
, но я не могу понять, как сделать общий метод для рекурсии.
EDIT
Например, если n=3
, я хотел бы выписать 1 1 1
, 1 1 2
, 1 2 1
, 1 2 2
, 2 1 1
, 2 1 2
, 2 2 1
, 2 2 2
.
Мы не ограничиваемся только n<11
. Например, если n=11
, мы бы выход
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 1 1 3
...
1 1 1 1 1 1 1 1 1 1 10
1 1 1 1 1 1 1 1 1 2 1
1 1 1 1 1 1 1 1 1 2 2
1 1 1 1 1 1 1 1 1 2 3
...
1 1 1 1 1 1 1 1 1 9 10
1 1 1 1 1 1 1 1 1 10 1
1 1 1 1 1 1 1 1 1 10 2
1 1 1 1 1 1 1 1 1 10 3
...
10 10 10 10 10 10 10 10 10 9 10
10 10 10 10 10 10 10 10 10 10 1
10 10 10 10 10 10 10 10 10 10 2
...
10 10 10 10 10 10 10 10 10 10 10
Таким образом, цифры номера может быть любое значение между и включая 1
и 10
. Массив myArray
просто используется для получения одного из этих чисел, затем мы печатаем его и переходим к следующему номеру и повторяем.
Первая проблема, с которой вы столкнулись в своем коде, заключается в том, что вы используете массив элементов 'n' (для хранения всех возможных значений, которые вы ищете, я полагаю), но число значения, которые вам нужно найти, намного выше (в порядке 'n!' или '(n-1) * (n-1)', если я понимаю ваш вопрос) –
Можете ли вы немного уточнить свою проблему? Ожидаемый ввод и вывод? Ваш код не составляет тонны смысла для любой интерпретации, о которой я могу думать, основываясь на вашей проблеме, как указано, но ваша проблема, как указано, мне не совсем понятна. –
Я предполагаю, что 'n' может быть не более 10, иначе я не уверен, как цифра * one * может иметь значение набора. – InBetween