Учитывая две переменные:

«n» - любое произвольное значение.

«i» - это количество раз, когда значение увеличивается в сумме до того, как достигнет значения «n».

Так, например, если выбрано значение n = 344, тогда i = 26, потому что:

26 + 25 + 24 + ... + 3 + 2 + 1 = 351

26 - это сколько раз переменная «i» складывается в порядке убывания, прежде чем она станет равной n = 344, или когда она впервые превзойдет ее.

public class Trstuff{
    public static void main (String [] arg) {
        int n = 4;
        int i = computeIndex(n);
        System.out.print(i);
    }
    public static int computeIndex(int n) {
        int i = 1;
        int sum = 0;
        for(i = 1; sum <= n; i++) {
            sum = sum + i;
        }
        return i;
    }
}

Моя цель - выбрать любое значение «n», а затем программа вернет мне переменную «i».

Как моя программа, я думал, что она должна быть правильной, но почему-то это не так. Вот пример с n = 4.

В результате должно получиться «i = 3», потому что:

1 + 2 = 3

1 + 2 + 3 = 6

Таким образом, возрастающее значение «i» в цикле добавляется 3 раза, прежде чем цикл предположительно должен остановиться из-за выражения «sum <= n» в цикле.

Однако когда я запускаю программу, она вместо этого возвращает значение 4. Я просто не могу понять, что не так и почему моя программа дает мне 4 вместо правильного ответа, 3?

0
WoeIs 24 Окт 2018 в 06:12

2 ответа

Лучший ответ

Прочтите цикл for следующим образом:

for every value of i while sum smaller or equal to n, add i to sum and increment i

Последняя часть строки and increment i выполняется после суммы sum + i, но перед следующей проверкой, которая проверяет, меньше ли сумма или равна n, в результате чего i всегда на единицу больше ожидаемого. ,

Решением может быть использование другого выхода (существуют разные решения):

public static int computeIndex(int n) {
    int i = 1;
    int sum = 0;
    while true {
        sum = sum + i;
        if sum<n {
          i++;
        } else break;
    }
    return i;
}
3
Norbert van Nobelen 24 Окт 2018 в 03:48

Сумма p последовательных целых чисел, начиная с 1, равна p * (p + 1) / 2

Поэтому в основном вам нужно решить x ^ 2 + x-2 * n = 0, с решением

Х = 0,5 * (sqrt (1 + 8n) -1)

0
Paul Janssens 24 Окт 2018 в 08:06
52960564