«Нарастающий итог»
Задача:
В массиве А(n) каждый элемент, кроме первого, заменить суммой всех предыдущих элементов.
Вводимые данные | Предполагаемый вывод | Комментарий |
1 1 1 1 1 1 | 1 1 2 3 4 5 | Тест пройден |
1 2 3 4 5 6 7 8 9 | 1 1 3 6 10 15 21 28 36 | Тест пройден |
3 5 2 9 0 4 65 156 1 | 3 3 8 10 19 19 23 88 244 | Тест пройден |
2 -7 3 8 -4 5 -2 4 2 | 2 2 -5 -2 6 2 7 5 9 | Тест пройден |
Исходный код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception{ Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] a = new int[n]; for(int i=0;i<n;i++){ a[i]= in.nextInt(); } int S=0; int i; for(i=0;i<n;i++){ for(int j=0;j<n-i-1;j++){ S+=a[j]; } a[n-i-1]=S; S=0; } a[0]=a[1]; for( i=0;i<n;i++){ System.out.print(a[i]+" "); } } } |
Описание:
Если действовать в лоб (последовательно менять значения элементов от первого до последнего на сумму предыдущих) можно получить различные геометрические прогрессии и даже, в некоторых случаях, последовательность Фибаначчи(так как мы меняем предшествующие элементы, и, при обычном подходе нет эффективного способа их запоминать). Подумав некоторое время над этой проблемой, и осознав бесперспективность своих действий, решил зайти с другой стороны. Да, я не могу менять элементы в начале массива, но я могу менять их в конце, т. к. они не влияют на вычисления. Для этого пришлось создать новый цикл, в котором мы находим сумму всех элементов массива кроме последнего, величина которого (массива) уменьшается с каждым шагом. Далее, в главном цикле, мы последовательно присваиваем элементам массива найденные суммы. И уже после цикла присваиваем нулевому элементу значение первого.