Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
1

Найдите сумму трех наибольших <Положительных нечетных > элементов исходного массива Р(22)

14.11.2018, 21:05. Показов 1993. Ответов 19

Author24 — интернет-сервис помощи студентам
Привет всем, нужна ваша помощь, изучаю Java совсем немного, сейчас на массивах, есть задание, я попытался его реализовать, но есть проблемы. Подскажите что, да как..
Задание: Найдите сумму трех наибольших <Положительных нечетных > элементов исходного массива Р(22).
Код:
Java
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
public static void main(String[] args) {
      
        int arr[] = new int [22];
        int i;
  
        for (i=0; i<22; i++)
        { arr[i] = (int) (Math.random()*(100)-50);
        System.out.print("  " + arr[i]+ " ");}
        System.out.println();
 
         int sum1 = 0;
         int sum2 = 0;
         int sum3 = 0;
 
       for (i = 0; i < 3; i++) {
       sum1 += arr[i];   
       sum2 += arr[i];
       sum3 += arr[i];
       System.out.print("Sum1: " + sum1 + " "  ); 
       System.out.print("Sum2: " + sum2 + " "  );
       System.out.print("Sum3: " + sum3 + " "  );  
       System.out.println();}
        
     if  (sum1 > sum2 && sum1 > sum3){ 
     System.out.print("Максимальное "+sum1);
     else 
         (sum2 > sum3 && sum2 >  sum1);
     System.out.print("Максимальное "+sum2);
     else 
          System.out.print("Максимальное "+sum3);}
        
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2018, 21:05
Ответы с готовыми решениями:

Найдите сумму трех наибольших <Положительных нечетных > элементов исходного массива Р(22)
Найдите сумму трех наибольших &lt;Положительных нечетных &gt; элементов исходного массива Р(22) Буду...

Найдите сумму трех наибольших отрицательных четных элементов исходного массива Р(22)
Найдите сумму трех наибольших отрицательных четных элементов исходного массива Р(22).

Найти сумму трех наибольших Положительных Нечетных элементов массива
Подскажите как написать код этой задачи на языке программирования С, буду благодарен за помощь)...

Найти сумму трёх наибольших из элементов массива
Добрый день, нужна помощь в написании программного кода. Вот задание: Ввести массив из десяти...

19
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
14.11.2018, 21:22 2
Цитата Сообщение от kotik95 Посмотреть сообщение
if *(sum1 > sum2 && sum1 > sum3){
* * *System.out.print("Максимальное "+sum1);
* * *else
* * * * *(sum2 > sum3 && sum2 > *sum1);
* * *System.out.print("Максимальное "+sum2);
* * *else
* * * * * System.out.print("Максимальное "+sum3);}
скобок не хватает?
Цитата Сообщение от kotik95 Посмотреть сообщение
sum1 += arr[i]; *
* * * *sum2 += arr[i];
* * * *sum3 += arr[i];
зачем тебе три одинаковые переменные?
где поиск максимальных значений ваще непонятно
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
14.11.2018, 21:31  [ТС] 3
xoraxax, тяжко, а вам не сложно подредактировать мой код?
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
14.11.2018, 21:49 4
Цитата Сообщение от kotik95 Посмотреть сообщение
подредактировать
Тут проще сызнова написать, т.к. твоя прога, увы, практически ничего из задачи не выполняет.
Попробуй разбить задачу на несколько подзадач, и для каждой подзадачи напиши отдельный метод. Ну а потом из этих "кирпичиков" составь окончательный вариант.
Например:
- найти все положительные элементы массива
- найти все нечетные элементы массива
- найти 3 наибольших элемента
...
Потом, последовательно вызывая эти методы и решится, собсно, задача.


Добавлено через 4 минуты
Бонус
Java
1
2
3
4
5
6
7
8
9
10
11
12
int sum = new Random()
                .ints(22, -50, 50)
                .peek(x -> System.out.print(x + " "))
                .filter(x -> x % 2 != 0 && x > 0)
                .boxed()
                .sorted(Integer::compare)
                .sorted(Comparator.reverseOrder())
                .limit(3)
                .mapToInt(x -> x)
                .sum();
 
        System.out.println("\nSumm: " + sum);
1
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
14.11.2018, 23:22  [ТС] 5
iSmokeJC, простите, но я совсем новичок в джаве, и боюсь, что сам не справлюсь..
Я кое что сделал, но все равно не получается, если вы готовы мне помочь, то я могу скинуть
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
14.11.2018, 23:28 6
Цитата Сообщение от kotik95
боюсь, что сам не справлюсь..
А ты не бойся! Попробуй. Выложи, что получится, посмотрим, подскажем.
Просто, если сейчас дать тебе готовый развернутый код, то не факт, что ты его поймешь. Соответственно толку от этого не будет.
Пробуй, не стесняйся, все когда-то начинали...
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
14.11.2018, 23:34  [ТС] 7
iSmokeJC,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int mas[] = new int [10];
    int sum = 0;
    int i; 
       for (i=0; i<10; i++){ 
           mas[i] = (int) (Math.random()*(20)-10);
           System.out.print("  " + mas[i]+ " ");
       } 
       for (i=0; i<10; i++) {   
              if( (mas[i] % 2 != 0) && (mas[i] > 0) ){
                sum += mas[i];}
       System.out.print("Sum: " + sum);  
       System.out.println(); 
       
       }
Спасибо за поддержку
Вот, попытка номер два, здесь я пытаюсь найти сумму положительных нечетных элементов, и когда запускаю, он мне считает суму раз 10 и по разному, если дело в цикле, то как его организовать?
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
14.11.2018, 23:40 8
Цитата Сообщение от kotik95 Посмотреть сообщение
по разному
Цитата Сообщение от kotik95 Посмотреть сообщение
Math.random()
Так при каждом запуске создается случайный массив. Почему результат одинаковым должен быть?
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
14.11.2018, 23:42  [ТС] 9
JIeIIIa, изначально я хотел, чтобы массив заполнился рандомно, а потом три больших числа из них просто суммировались
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
14.11.2018, 23:46 10
kotik95, я про Ваш последний код. Запустили, посчитали сумму. Для следующего запуска сумма не должна совпадать с предыдущей.
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
14.11.2018, 23:50  [ТС] 11
JIeIIIa, А как мне сделать, чтобы была одна сумма?
0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
14.11.2018, 23:52 12
kotik95, КО говорит, что входящие данные каждый раз должны быть одинаковые. Следовательно необходимо убрать Random
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
14.11.2018, 23:55  [ТС] 13
JIeIIIa, логично, спасибо) завтра уже попробую)
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
19.11.2018, 19:23  [ТС] 14
JIeIIIa,
Добрый вечер! Я попытался еще раз, но все равно вынужден просить вашей помощи в решении данной задачи
Java
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
Scanner s = new Scanner(System.in); 
System.out.println("Введите количество чисел: "); 
int a = s.nextInt(); 
int[] mas = new int[a]; 
int max = mas[0]; 
System.out.println("Введите числа в массив: "); 
 
for(int i = 0; i < mas.length; i++) { 
mas[i] = s.nextInt();} 
 
for(int i = 0; i < mas.length; i++) { 
if(mas[i] > max ) { 
if (mas[i] % 2 != 0 && mas[i] > 0) 
max = mas[i];}} 
System.out.println("Максимальное число 1: " + max); 
 
int max1 = mas[0]; 
for(int i =0; i < mas.length-1; i++) { 
if(mas[i] > max1 && max1<max ) { 
if (mas[i] % 2 != 0 && mas[i] > 0) 
max1 = mas[i];}} 
System.out.println("Максимальное число 2: " + max1); 
 
int max2 = mas[0]; 
for(int i =0; i < mas.length-2; i++) { 
if(mas[i] > max2 && max2<max && max2<max1 ) { 
if (mas[i] % 2 != 0 && mas[i] > 0) 
max2 = mas[i];}} 
System.out.println("Максимальное число 3: " + max2); 
 
int sum = 0; 
for(int i =0; i < mas.length; i++) { 
sum = max+max1+max2;} 
System.out.print("Сумма трёх наибольших значений: " + sum); 
System.out.println(); 
} 
}
Добавлено через 2 минуты
iSmokeJC, Добрый вечер! Я попытался еще раз, но все равно вынужден просить вашей помощи в решении данной задачи
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
19.11.2018, 20:01 15
kotik95, вот просто пример
Java
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package ru.ismoke;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
 
public class Cyber {
    public static void main(String[] args) {
        Cyber cyber = new Cyber();
        Integer[] array = cyber.getArray();
        int sum = cyber.getSum(cyber.getMax(cyber.getOdds(cyber.getPositives(array))));
        System.out.println("Сумма трех наибольших положительных нечетных элементов равна " + sum);
 
    }
 
    private Integer[] getArray() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Введите количество чисел: ");
        int a = scan.nextInt();
        Integer[] mas = new Integer[a];
        System.out.println("Введите числа в массив: ");
 
        for (int i = 0; i < mas.length; i++) {
            System.out.printf("Элемент %d : ", i);
            mas[i] = scan.nextInt();
        }
        return mas;
    }
 
    private Integer[] getPositives(Integer[] arr) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int elem : arr) {
            if (elem > 0) list.add(elem);
        }
        return list.toArray(new Integer[0]);
    }
 
    private Integer[] getOdds(Integer[] arr) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int elem : arr) {
            if (elem % 2 != 0) list.add(elem);
        }
        return list.toArray(new Integer[0]);
    }
 
    private Integer[] getMax(Integer[] arr) {
        return Arrays.stream(arr)
                .sorted(Comparator.reverseOrder())
                .limit(3)
                .toArray(Integer[]::new);
    }
 
    private int getSum(Integer[] arr) {
        int sum = 0;
        for (int elem : arr) {
            sum += elem;
        }
        return sum;
    }
}
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
19.11.2018, 20:45  [ТС] 16
iSmokeJC, т.е. сначала сортировка? а что означает в данном примере Comparator.reverseOrder?
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
19.11.2018, 20:58 17
Цитата Сообщение от kotik95 Посмотреть сообщение
Comparator.reverseOrder
Обычная сортировка в обратном порядке.

Цитата Сообщение от kotik95 Посмотреть сообщение
т.е. сначала сортировка?
Вызывать методы можно в какой угодно последовательности (следуя логике, конечно). Например, сначала отбираем нечетные, потом положительные, потом максимальные, потом уж сумму.
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
19.11.2018, 22:22  [ТС] 18
iSmokeJC, а можно комментарий к этому кусочку?
Java
1
2
3
4
5
private Integer[] getMax(Integer[] arr) {
        return Arrays.stream(arr)
                .sorted(Comparator.reverseOrder())
                .limit(3)
                .toArray(Integer[]::new);
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17573 / 10326 / 2820
Регистрация: 21.10.2017
Сообщений: 22,388
19.11.2018, 22:39 19
Из исходного массива делаем поток, сортируем его от бОльшего к меньшему, отбираем три элемента и собираем их в массив, который возвращаем. Как-то так...
0
3 / 3 / 0
Регистрация: 29.09.2016
Сообщений: 238
19.11.2018, 22:45  [ТС] 20
iSmokeJC, спасибо большое за помощь
0
19.11.2018, 22:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2018, 22:45
Помогаю со студенческими работами здесь

Найти сумму трех наибольших отрицательных четных элементов массива Р(22)
(на паскале)Найти сумму трех наибольших отрицательных четных элементов массива Р(22)

Определить суммы четных, нечетных, положительных и отрицательных элементов исходного массива X(n)
3. Определить суммы четных, нечетных, положительных и отрицательных элементов исходного массива...

Найдите сумму положительных элементов двумерного массива размера 20 на 25 и умножьте её на сумму отрицательных элементов.
Найдите сумму положительных элементов двумерного массива размера 20 на 25 и умножьте её на сумму...

Не используя логические операторы, найдите сумму двух наибольших из трех заданных чисел
Даны три числа. Не используя логические операторы, найдите сумму двух наибольших из них....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru