Fila de soldados java

tenho um exercício que me deparei, e nao estou conseguindo começar, gostaria que alguem me ajudasse com a lógica do exercício, o exercício é o seguinte:

Escreva um programa para resolver o seguinte problema: em um quartel, um coronel quer
montar uma apresentação, demonstrando a disciplina e organização de seus soldados. Para
tanto ele quer distribuir seus soldados em filas, tal que o número da fila represente a
quantidade de soldados, ou seja, fila 1, 1 soldado, fila 2, 2 soldados e assim por diante. A
última fila deverá ter a quantidade restante dos soldados. Sua missão é criar um programa
para ler a quantidade de soldados do quartel e por fim, gerar a distribuição dos soldados
em filas. Para isso utilize um vetor de Strings e acumule em cada posição uma fila (posição
[0], fila 1, 1 soldado; posição [1], fila 2, 2 soldados; posição[2], fila 3, 3 soldados; …;
posição [n-1], fila n, soldados restantes). O programa deve ser executado até o usuário
digitar zero. Entradas negativas devem gerar mensagem de erro e solicitar nova entrada
válida. Ao final de cada distribuição em filas, apresentar a quantidade de soldados, a
quantidade de filas e a quantidade de soldados na última fila.

Nestes termos, é uma progressão aritimética.
Você tem:
-> a1 = 1; //primeiro termo da P.A.
-> r = 1; //razão
-> n = ? //quantidade de termos
-> an = ? //ultimo termo da P.A.
-> S = total de soldados;//soma dos números

S = ((a1+an)n)/2
logo:
S = ((1 + an)n) / 2)

an = a1 + (n-1) * r
logo:
an = 1 + (n-1) * 1
an = 1 + n - 1
an = n -> o ultimo termo da P.A = quantidade de termos da P.A.

Assim, a função S (soma) pode ser reescrita da seguinte forma:

S = ((1 + an)n )/ 2
S = (1 + n) * n/ 2
2S = (1 + n) * n
2S = n + n²
n² + n - 2S = 0;

Como a variável S é total de soldados, falta descobrir apenas n.

Lembrar que:

xFilas = (-b ± raiz(b² -4ac) / 2a)

Como conhecemos que a = 1, b = 1 e c = -2S, o método é escrito da seguinte forma:

public double totalFilas(int totalSoldados){
    return (-1 + Math.sqrt( 1 + 8 * totalSoldados))/2.0;
}

Se o retorno da função não for equivalente a um número inteiro, o total de soldados alocados não atende o proposto.

 //com este método vc pode testar se a última fila está inteira
public boolean isFilaInteira(double totalFilas){
    return Math.floor(totalFilas) == totalFilas;
}

Exemplo:

int soldados = 2;
System.out.println(isFilaInteira(totalFilas(soldados))+": "+totalFilas(soldados));
soldados = 120;
System.out.println(isFilaInteira(totalFilas(soldados))+": "+totalFilas(soldados));

A captura de entradas é outra história.

Pra não perder a viagem:

public static void main(String args[]) {
        int totalSoldados = 19;
        String[] filas = filas(totalSoldados);
        for (int i = 0; i < filas.length; i++) {
            if (i + 1 == filas.length) {
                filas[i] = totalSoldados + " soldado(s)";
                break;
            }
            filas[i] = (i + 1) + " soldado(s)";
            totalSoldados -= i + 1;
        }
        for (int i = 0; i < filas.length; i++) {
            System.out.println("fila[" + (i + 1) + "]" + filas[i]);
        }
    }

    public static double totalFilas(int totalSoldados) {
        return (-1 + Math.sqrt(1 + 8 * totalSoldados)) / 2.0;
    }

    public static boolean isFilaInteira(double totalFilas) {
        return Math.floor(totalFilas) == totalFilas;
    }

    public static String[] filas(int totalSoldados) {
        double filas = totalFilas(totalSoldados);
        int totalFilas = isFilaInteira(filas) ? (int) filas : (int) filas + 1;
        return new String[totalFilas];
    }

Dá pra implementar sem usar fórmulas, usando somente o for e decrementando o total de soldados, além de outros passos.

Entendii, obrigado pela ajuda, vou dar uma estudada no algoritmo