Простая логика генератора чисел

#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. Длина подстроки цикла от 1 до string.length() - 1
  2. Цикл, начинающийся с символа от 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);
        }
    }
}