Как найти вторую половину массива

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

Как найти половину массива?

В принципе размер массива должен быть четным.
Первая половина от 1 до n div 2, вторая от n div 2+1 до n.



0



samec051

0 / 0 / 0

Регистрация: 14.01.2015

Сообщений: 49

22.11.2017, 20:32

 [ТС]

3

Не могли ли Вы мне немного помочь?Совсем не выходит

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
 a:array [1..70] of integer;
 min,i,s,n:integer;
 b,c:real;
 begin
    writeln('Введите размер массива = ');
    readln(n);
  for i:=1 to n do
      a[i]:=random(100);      
  for i:=1 to n do   
   s:=s+a[i];
   writeln('сумма=',s);
   if s>0 then 
        begin
      for i := 1 to n do 
      readln (a[i]);
          if a[i] < a[min] then
          min:=i;
          WriteLn ('Наименьший элемент',min);
        end;
end.



0



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.11.2017, 20:58

4

Лучший ответ Сообщение было отмечено samec051 как решение

Решение

Pascal
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
29
30
31
32
33
34
35
36
37
var a:array [1..70] of integer;
    min,i,s,n:integer;
begin
randomize;
repeat
write('Введите размер массива четное число от 2 до 70 n=');
readln(n);
until(n in [2..70])and(n mod 2=0);
writeln('Массив');
s:=0;
for i:=1 to n do
 begin
  a[i]:=-30+random(61);
  write(a[i]:4);
  s:=s+a[i];
 end;
writeln;
writeln('Сумма=',s);
if s>0 then
 begin
  writeln('Она положительная');
  min:=a[1];
  for i:=1 to n div 2 do
  if a[i]<min then min:=a[i];
  writeln('Минимальный элемент первой половины=',min);
 end
else
 begin
  writeln('Она не положительная');
  writeln('Возведение в квадрат элементов второй половины');
  for i:=1 to n do
   begin
    if i>n div 2 then a[i]:=sqr(a[i]);
    write(a[i]:4);
   end
  end
end.



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's user avatar

the Tin Man

158k42 gold badges214 silver badges303 bronze badges

asked May 14, 2020 at 8:27

Zephox's user avatar

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

Ursus's user avatar

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

user1934428's user avatar

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

Это немного помогает?

Понравилась статья? Поделить с друзьями:
  • Как найти кнопку del
  • Как найти ответ на контрольный вопрос на
  • Как найти сектор сферы
  • Как найти границы чанка в майнкрафте
  • Как найти область определения подкоренной функции