0 / 0 / 0 Регистрация: 14.01.2015 Сообщений: 49 |
|
1 |
|
Как найти половину массива?22.11.2017, 19:02. Показов 4975. Ответов 3
Ввести массив А(N) (N<=70). Если сумма его элементов положительна, то найти минимум первой половины массива. Иначе элементы второй половины возвести в квадрат. Массив вывести на печать.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
22.11.2017, 19:02 |
3 |
Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
|
22.11.2017, 19:14 |
2 |
Как найти половину массива? В принципе размер массива должен быть четным.
0 |
samec051 0 / 0 / 0 Регистрация: 14.01.2015 Сообщений: 49 |
||||
22.11.2017, 20:32 [ТС] |
3 |
|||
Не могли ли Вы мне немного помочь?Совсем не выходит
0 |
Puporev Почетный модератор 64287 / 47586 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
22.11.2017, 20:58 |
4 |
|||
Сообщение было отмечено samec051 как решение Решение
1 |
I am able to find the FIRST half of an array using:
def first_half(array)
new_array = []
i = 0
while i < (array.length / 2.0)
ele = array[i]
new_array << ele
i += 1
end
return new_array
end
print first_half(["John", "Jack", "Jim", "Thomas"])
How do I use a while
loop and find the second half of an array?
the Tin Man
158k42 gold badges214 silver badges303 bronze badges
asked May 14, 2020 at 8:27
2
You could go though the whole array and add the element only if it passes your condition
i = 0
while i < array.length
ele = array[i]
if i < array.length / 2.0
new_array << ele
end
i += 1
end
now you can change just the if condition
answered May 14, 2020 at 8:35
UrsusUrsus
29.5k3 gold badges30 silver badges49 bronze badges
You already do calculate the first half of the array in an unnecessarily complicated way. For an array a
, the expression a[i..n]
returns the array elements at position i
to n
(the ..
is an operator to construct a Range
).
The main problem is that you have to decide for arrays with an odd number of elements, whether the middle one should go to the first or second half. Hence, in your case:
first_half = array[0..(array.length/2-1)]
second_half = array[(array.length/2)..(array.length-1)]
answered May 14, 2020 at 9:44
user1934428user1934428
18.9k7 gold badges41 silver badges87 bronze badges
Как найти вторую половину массива
Я могу найти ПЕРВУЮ половину массива, используя:
def first_half(array)
new_array = []
i = 0
while i < (array.length / 2.0)
ele = array[i]
new_array << ele
i += 1
end
return new_array
end
print first_half(["John", "Jack", "Jim", "Thomas"])
Как мне использовать while
цикл и найти вторую половину массива?
2020-05-14 11:27
2
ответа
Решение
Вы можете пройти через весь массив и добавить элемент, только если он соответствует вашему условию
i = 0
while i < array.length
ele = array[i]
if i < array.length / 2.0
new_array << ele
end
i += 1
end
теперь вы можете изменить только условие if
2020-05-14 11:35
Вы уже вычислили первую половину массива излишне сложным способом. Для массива a
, выражение a[i..n]
возвращает элементы массива в позиции i
к n
(в ..
оператор для построения Range
).
Основная проблема заключается в том, что для массивов с нечетным числом элементов вам нужно решить, должен ли средний идти в первую или вторую половину. Следовательно, в вашем случае:
first_half = array[0..(array.length/2-1)]
second_half = array[(array.length/2)..(array.length-1)]
2020-05-14 12:44
Подскажите в чем ошибка, не понимаю, Выводит вторую половину массива.
Подскажите в чем ошибка, не понимаю, Выводит вторую половину массива. HELP
package com.javarush.task.jdk13.task07.task0705;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
/*
Один большой массив и два маленьких
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[] array1 = new int[20];
for (int i = 0; i < array1.length; i++) {
array1[i] = Integer.parseInt(reader.readLine());
}
int[] array2 = new int[10];
array2 = Arrays.copyOf(array1, 10);
int[] array3 = new int[10];
array3 = Arrays. copyOfRange(array1,10,20);
System.out.println(Arrays.toString(array3));
}
//напишите тут ваш код
}
Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.
Вы можете использовать «нормальный» цикл for с i равным половине длины, округленной вверх:
function secondHalf(arr) {
let newArr = [];
for (let i = Math.ceil(arr.length / 2); i < arr.length; i++) {
newArr.push(arr[i]);
}
return newArr;
}
console.info(secondHalf([1, 2, 3, 4, 5, 6, 7]));
console.info(secondHalf([1, 2, 3, 4]));
console.info(secondHalf([1, 2, 3]));
console.info(secondHalf([1, 2]));
console.info(secondHalf([1]));
Обновлено: происходит то, что часть условия цикла for разделена на три части:
let i = Math.ceil(arr.length / 2);
i < arr.length;
i++
Это первая часть, которая делает всю «магию».
Вместо того, чтобы начинать итерацию с 0, мы начинаем с половины длины массива, округленной в большую сторону, то есть, если у нас есть такой массив:
[1, 2, 3, 4, 5, 6, 7]
| | | | | | |
0 1 2 3 4 5 6
|
we start from here
Половина длины равна 3,5 (7/2), а с округлением в большую сторону: 4
Это означает, что мы начинаем итерацию с индекса 4 и далее:
// this is what is happening at each iteration of the for loop:
// i = 4
newArr.push(arr[4]); // which is the number 5
// i = 5
newArr.push(arr[5]); // which is the number 6
// i = 6
newArr.push(arr[6]); // which is the number 7
// i is not below arr.length anymore, so stop iterating
Это немного помогает?