Как суммировать содержимое массива с его степенью 3
Мне нужно сделать что-то вроде этого - пользователь вводит число (например, 5), и программа показывает результат следующего действия: 1*1*1 + 2*2*2 + 3*3*3 + 4*4*4 + 5*5*5. Мой код следующий:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter your number:");
int n = input.nextInt();
int a[] = new int[n];
int power = 0;
int sum = 0;
for (int i = 1; i <= a.length; i++)
{
power = (int) pow(i, 3);
// Maybe here'a the problem, a[n] has not enough space for the power (???)
sum += a[power];
}
System.out.println(Result: " + sum);
}
Я думаю, что понимаю, почему этот код не работает, но буду признателен за любые идеи о том, как сделать это правильно и запустить.
5 ответов
Или просто используйте математику:
int n = input.nextInt();
int result = (int)(0.25 * Math.pow(n, 2)*Math.pow(1+n,2));
Или еще проще, как сказал @ajb:
int result = n*n*(n+1)*(n+1)/4;
Изменить:
sum += a[power];
в
a[i-1] = power;
sum += a[i-1];
или вообще забудь массив
sum += power;
sum += a[power];
не существует
Вам нужно:
- хранить
power
значение вi
элемент массива - добавить
i
значение массиваsum
Измените ваше тело цикла на:
power = (int) pow(i, 3);
a[i - 1] = power;
sum += a[i - 1];
Вы делаете слишком много работы.
Scanner input = new Scanner(System.in);
System.out.println("Enter your number:");
int n = input.nextInt(),
sum = 1;
for (int i=2; i<=n; i++) {
sum += (int) Math.pow(i,3);
}
сделанный. sum
теперь содержит сумму 1³ + 2³ + 3³ + ...
Или более эффективно с точно такой же функциональностью:
Scanner input = new Scanner(System.in);
System.out.println("Enter your number:");
int n = input.nextInt(),
sum = 1;
while(n > 1) {
sum += (int) Math.pow(n--,3);
}
Зачем? Потому что 1 + 5³ + 4³ + 3³ + 2³ совпадает с 1³ + 2³ + 3³ + 4³ + 5³
Конечно, вы также можете просто напрямую вычислить это значение, используя математические расчеты, обрезая весь алгоритм простым арифметическим инструментом.