#java
#java
Вопрос:
У меня есть номер 0127
я пытаюсь логически сгенерировать следующую последовательность чисел в JAVA
0
1
2
7
01
12
27
012
127
0127
1270
2701
7012
01270
12701
27012
.
.
Я ломаю голову
Комментарии:
1. Я предполагаю, что это домашнее задание?
2. да .. Извините, ребята, я потратил много времени, я не мог получить эту глупую вещь
3. Вы видите какие-либо шаблоны? Что вы выяснили на данный момент?
4. Мой прогресс .. 0,1,2,3,4,5,6,7 … 50 … 6,5,4,3,2,0-> вот где я
5. @Soft — это из-за того, что вы не можете определить шаблон, или у вас проблемы с кодом, или из-за того и другого? Опубликуйте то, что вы думаете о шаблоне.
Ответ №1:
Я бы преобразовал число в String
объект, а затем в массив символов.
Оттуда вы можете выполнять итерации по массиву со следующей логикой:
int MAX_LENGTH = 10;
char[] array = "0127".ToCharArray();
for (int i = 0; i < MAX_LENGTH; i )
{
for (int offset = 0; offset < array.Length; offset )
{
String disp = "";
for (int j = 0; j <= i; j )
{
int index = j offset;
while (index >= array.Length)
index -= array.Length;
disp = array[index];
}
Console.WriteLine(disp);
}
}
Измените MAX_LENGTH
на то, какой должна быть максимальная длина выходной строки.
Вот результат, который выдает этот код:
Комментарии:
1. Ошибка, это не Java, и она не выдает ту же последовательность (но я все еще думаю, что в вопросе Soft не хватает некоторых чисел — поэтому алгоритм, переведенный на Java, может быть тем, который решает проблему ;))
2. Я внес незначительные изменения в это и получил ожидаемый результат
3. Я забыл изменить
if
наwhile
внутри. Я обновил его и опубликовал изображение результатов. @Andreas, я считаю, что это действительно создает ту же последовательность![]()
4. Как я уже сказал, я был уверен, что это решение, но 70, 270 и 701 отсутствуют в последовательности вопроса. @Soft — пожалуйста, перепроверьте свой вопрос!!
Ответ №2:
Разделите это на два этапа: подстроки и суперструны.
Иногда лучший способ решить большую проблему — разделить работу на более мелкие задачи, которые легче решить.
Для подстрок используйте вложенные циклы for .
- Длина подстроки цикла от
1
доstring.length() - 1
- Цикл, начинающийся с символа от
0
доstring.length() - 1 - substringLength
Во внутреннем цикле сгенерируйте подстроку заданной длины из заданного начального символа. Это сгенерирует все подстроки.
Для суперструн вам нужен только один цикл, чтобы выбрать начальный символ. Для каждого элемента в цикле начинайте с этого символа и создавайте свою строку до заданной длины, перенося от последнего символа к первому.
Комментарии:
1. Мне пришлось подумать об этом больше, чем о реальной проблеме. Просто говорю
![]()
2. 1 за то, что думаешь об этом больше, чем о реальной проблеме! Я подумал,
O(n^3)
является ли приемлемая сложность выполнения для домашней работы3. Все опубликованные ответы являются
O(n^3)
.
Ответ №3:
Первые несколько строк, начинающихся с 0
по 0127
(включительно), являются подпоследовательностями {0,1,2,7}
(пустой набор отсутствует).
В остальном — это как кольцо, вы выбираете начальный номер и «выполняете» n
шаги в одном направлении:
0
/
7 1
/
2
это привело бы к:
n=1: 0, 1, 2, 7
n=2: 01, 12, 27, 70
n=3: 012, 127, 270, 701
n=4: 0127, 1270, 2701, 7012
Но я не вижу связи между двумя частями — вы уверены, что последовательность в вашем вопросе завершена, ни одно число не пропущено? особенно 70, 270 и 701?
Ответ №4:
int MAX_LENGTH = 5;
String[] numStr = {"0","1","2","7"};
for (int i = 0; i < MAX_LENGTH; i )
{
for (int offset = 0; offset < numStr.length; offset )
{
if(i>0 amp;amp; offset 1 == numStr.length) continue;
String disp = "";
for (int j = 0; j <= i; j )
{
int index = j offset;
if (index >= numStr.length)
index -= numStr.length;
disp = numStr[index];
}
System.out.println(disp);
}
}
Комментарии:
1. Мило. Убедитесь, что вы изменили строку
if (index >= numStr.length)
наwhile (index >= numStr.length)
2. Результат не такой, как в вашем вопросе
Ответ №5:
Это мое решение. Он был выполнен с проверенным числом и генерирует ту же последовательность:
public static void printSequence(String number) {
final char[] charNumber = number.toCharArray();
final int sizeNumber = number.length();
int MAX_ITER = 5;
for (int i = 0; i < MAX_ITER; i ) {
for (int offset = 0; offset < sizeNumber; offset ) {
String subSequence = "";
for (int j = 0; j <= i; j ) {
int index = (j offset) % sizeNumber;
subSequence = charNumber[index];
}
System.out.println(subSequence);
}
}
}