Рекурсивно добавляйте последовательные цифры даты рождения, пока она не достигнет одной цифры - PullRequest
0 голосов
/ 06 июня 2018

Я занимаюсь разработкой приложения для нумерологии, которое должно давать результат, аналогичный следующему:

1 5 0 8 1 9 9 4

6 5 8 9 1 1 1

1 1 1 1 2 2

2 2 2 3 4

4 4 5 7

8 9 1

1 1

2

Он должен добавлять последовательные цифры и сохранять первую цифру, если сумма составляет 2 цифры.

Я что-то упустил.Кажется, что добавление цикла while для длины intList не работает.

int date;
List<Integer> sumList = new ArrayList<Integer>();

Scanner s = new Scanner(System.in);
System.out.println("Enter the date");
date = s.nextInt();

int len = Integer.toString(date).length();

int[] convertarray = new int[len];

for (int index = 0; index < len; index++) {
    convertarray[index] = date % 10;
    date /= 10;
}

List<Integer> intList = new ArrayList<Integer>();
for (int i : convertarray) {
    intList.add(i);
}
Collections.reverse(intList);
System.out.println(intList);
int sum = 0;
int size = intList.size();

for (int i = 0; i < intList.size() - 1; i++) {
    sum = intList.get(i) + intList.get(i + 1);
    int length = (int) (Math.log10(sum) + 1);
    if (length > 1) {
        int firstDigit = Integer.parseInt(Integer.toString(sum).substring(0, 1));
        sum = firstDigit;
    }
    System.out.print(sum + " ");

    sumList.add(sum);

}
System.out.println("\n");
intList.clear();
intList = sumList;

Мой вывод выглядит примерно так:

1 5 0 8 1 9 9 4

6 5 8 9 1 1 1

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Простое рекурсивное решение:

public static void main(String[] args) throws Exception {
    String birthday = "01091995";
    int[] digits = Arrays.stream(birthday.split("")).mapToInt(Integer::parseInt).toArray();
    recursiveFunction(digits);
}

private static void recursiveFunction(int[] digits) {
    if(digits.length == 1) {
        // Base Case
        System.out.println(digits[0]);
    } else {
        // Recursive Case
        System.out.println(Arrays.toString(digits));
        int[] digitsProcessed = new int[digits.length -1];
        for (int i = 0; i < digits.length - 1; i++) {
            digitsProcessed[i] = digits[i] + digits[i+1]; // Logic
        }
        recursiveFunction(digitsProcessed);
    }
}

Это дает:

[0, 1, 0, 9, 1, 9, 9, 5]  // 8 numbers
[1, 1, 9, 10, 10, 18, 14] // 7 numbers
[2, 10, 19, 20, 28, 32]   // 6 numbers
[12, 29, 39, 48, 60]      // 5 numbers
[41, 68, 87, 108]         // 4 numbers
[109, 155, 195]           // 3 numbers
[264, 350]                // 2 numbers
614                       // 1 number
0 голосов
/ 06 июня 2018

Добавление цикла while для длины intList, похоже, не работает.

Что ж, это можно сделать с помощью циклов, но это будет сложнее и сложнее.

Алгоритм с рекурсией будет следующим:

  • Инициирует массив целых чисел.
  • Вызов рекурсивной функции "F" с массивом.

С этого момента поведение рекурсивной функции:

  • Проверьте, равна ли длина полученного массива 1.

    • Если это так, выведитеэлемент и завершить.

    • Если это не так:

      • Распечатать полученный массив.
      • Создать новый массив.
      • Поместите в этот новый массив результат обработки полученного добавления, как и предполагалось.
      • Вызовите рекурсивную функцию "F" с этим новым массивом.
...