Может ли мое решение задачи отличаться от эталонного?
Условие задачи. Создать новый массив размера 100 и заполнить его случайными числами из диапазона от 0 до 10000. Найти максимум среди сумм трех соседних элементов. Для найденной тройки с максимальной суммой выведите значение суммы и индекс первого элемента тройки.
Пример:
Для простоты пример показан на массиве размера 10
[1, 456, 1025, 65, 954, 2789, 4, 8742, 1040, 3254]
Тройка с максимальной суммой: [2789, 4, 8742]
Вывод в консоль:
11535
5
Пояснение: Первое число — сумма тройки [2789, 4, 8742]. Второе число — индекс первого элемента тройки, то есть индекс числа 2789.
Я решил вот таким образом:
public class task4 {
public static void main(String[] args) {
int[] array = new int[100];
Random random = new Random();
for (int i = 0; i < array.length; i++)
array[i] = random.nextInt(10000);
int maxSum = 0;
int maxSumIndex = 0;
for (int i = 0; i < array.length - 2; i++) {
int sum = 0;
sum = array[i] + array[i + 1] + array[i + 2];
if (sum > maxSum) {
maxSum = sum;
maxSumIndex = i;
}
System.out.println(maxSum);
System.out.println(maxSumIndex);
}
}
}
Правильный ответ выглядит так:
public class task4 {
public static void main(String[] args) {
int[] array = new int[100];
Random random = new Random();
for (int i = 0; i < array.length; i++)
array[i] = random.nextInt(10000);
int maxSum = 0;
int maxSumIdx = 0;
for (int i = 0; i < array.length - 2; i++) {
int sum = 0;
for(int j = i; j < i + 3; j++){
sum += array[j];
}
if (sum > maxSum) {
maxSum = sum;
maxSumIdx = i;
}
System.out.println(maxSum);
System.out.println(maxSumIdx);
}
}
}
Уже посмотрев правильный ответ, я для проверки уменьшил массив до 10, вывел все цифры в нем и перепроверил с калькулятором. Вроде все правильно выходит.
Получается, что верны оба решения? Или я все-таки что-то упустил?
Ответы (1 шт):
Решения идентичны, просто в первом случае сумма считается в одну строку, а во втором с помощью цикла. В данной задаче разницы нет, но во втором случае, если условие поменяется с "3 чисел" до "4 чисел", то достаточно будет изменить только две переменных, а не дописывать в строку новые слагаемые. Если в алгоритме есть повторение - старайтесь всегда использовать циклы.
public class task4 {
public static void main(String[] args) {
int[] array = new int[100];
Random random = new Random();
for (int i = 0; i < array.length; i++)
array[i] = random.nextInt(10000);
int maxSum = 0;
int maxSumIndex = 0;
int sequenceLen = 3
for (int i = 0; i <= array.length - sequenceLen; i++) {
int sum = 0;
for(int j = i; j < i + sequenceLen; j++){
sum += array[j];
}
if (sum > maxSum) {
maxSum = sum;
maxSumIdx = i;
}
}
System.out.println(maxSum);
System.out.println(maxSumIdx);
}
}
Еще прочитайте про Замена магического числа символьной константой