0 / 0 / 0
Регистрация: 28.10.2016
Сообщений: 53
1

Найти произведение двух наибольших отрицательных элементов массива

11.02.2017, 17:32. Показов 644. Ответов 9
Метки нет (Все метки)

Найдите произведение двух наибольших отрицательных элементов массива В(10).
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2017, 17:32
Ответы с готовыми решениями:

Найти произведение двух наибольших и двух наименьших элементов массива
Используя программу ранжирования, найти произведение двух наибольших и двух наименьших элементов...

Найти разность двух наибольших и двух наименьших положительных четных элементов массива
Найти разность двух наибольших и двух наименьших положительных четных элементов массива А(20),...

Найдите произведение двух крупнейших и двух маленьких отрицательных четных элементов исходного массива В (25)
Найдите произведение двух крупнейших и двух наименьших отрицательных четных элементов исходного...

Найдите произведение двух крупнейших и двух наименьших отрицательных кратных 4 элементов исходного массива В (25)
Найдите произведение двух крупнейших и двух наименьших отрицательных кратных 4 элементов исходного...

9
28 / 28 / 23
Регистрация: 18.04.2015
Сообщений: 81
11.02.2017, 17:41 2
А причём тут сортировка?
Хмм... Массив B, 10 элементов, да? самый простой вариант в лоб:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int min1, min2;
    if (B[0] > B[1]) {
        min1 = 1;
        min2 = 0;
    } else {
        min1 = 0;
        min2 = 1;
    }
    for (int i = 2; i < 10; i++) {
        if (B[i] > B[min2]) {
            min1 = min2;
            min2 = i;  
        }
    }
    printf("%lf", B[min1] * B[min2]);
Код не проверял, могут быть опечатки.
1
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
11.02.2017, 22:42 3
C
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
 
int main()
{
    int B[N], i, flag1 = 0, flag2 = 0, maxNeg1, maxNeg2, iNeg1, iNeg2;
    srand(time(NULL));
    for(i = 0; i < N; i++){
        printf("%d ", B[i] = rand() % 18 - 12);
        if(B[i] < 0){
            if(!flag1){
                maxNeg1 = B[i];
                iNeg1 = i;
                flag1 = 1;
                continue;
            }
            else{
                if(B[i] > maxNeg1){
                    maxNeg2 = maxNeg1;
                    maxNeg1 = B[i];
                    iNeg2 = iNeg1;
                    iNeg1 = i;
                    flag2 = 1;
                }
                if(!flag2){
                    maxNeg2 = B[i];
                    iNeg2 = i;
                    flag2 = 1;
                    continue;
                }
                else{
                    if(B[i] > maxNeg2 && i != iNeg1){
                        maxNeg2 = B[i];
                        iNeg2 = i;
                    }
                }
            }
        }
    }
    putchar('\n');
    if(!flag1)
        puts("Negative elements not found.\n");
    else{
        if(flag2){
            printf("Max two negative elements is B[%d] = %d and B[%d] = %d\n", iNeg1, maxNeg1, iNeg2, maxNeg2);
            printf("and their product is equal to %d\n", maxNeg1 * maxNeg2);
        }
        else
            printf("Only one negative elements was found B[%d] = %d\n", iNeg1, maxNeg1);
    }
    return 0;
}
1
268 / 252 / 186
Регистрация: 28.10.2015
Сообщений: 723
12.02.2017, 04:55 4
Цитата Сообщение от ShadowKing Посмотреть сообщение
А причём тут сортировка?
Можно и сортировкой. Достаточно лишь составить правильный компаратор. Положительные числа нас не интересуют, пусть будут равными. Положительные с отрицательными сравниваются как обычно, чтобы отрицательные собрались в начале массива. А вот отрицательные с отрицательными сортируются в обратном порядке, чтобы наибольшие выбрать.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
 
int cmp(const void *a, const void *b)
{
    int x = *(int*)a;
    int y = *(int*)b;
    if (x >= 0 && y >= 0) return 0;
    int c = x < y ? -1 : x != y;
    return x < 0 && y < 0 ? -c : c;
}
 
int main(void)
{
    int arr[] = { 1, -2, 3, -4, 5, -6, 7, -8, 9, 0 };
    qsort(arr, 10, sizeof(int), cmp);
    printf("%d %d\n", arr[0], arr[1]);
    return 0;
}
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
33193 / 18514 / 3901
Регистрация: 12.02.2012
Сообщений: 31,100
Записей в блоге: 12
12.02.2017, 09:14 5
Цитата Сообщение от ata Посмотреть сообщение
Можно и сортировкой.
- но не нужно. Сортировка делает много лишней работы.
ShadowKing прав. Его подход более рационален.
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
12.02.2017, 10:11 6
Цитата Сообщение от Catstail Посмотреть сообщение
Его подход более рационален.
если б он еще среди отрицательных искал
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
33193 / 18514 / 3901
Регистрация: 12.02.2012
Сообщений: 31,100
Записей в блоге: 12
12.02.2017, 10:40 7
Цитата Сообщение от LFC Посмотреть сообщение
если б он еще среди отрицательных искал
- ну, это детали
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
12.02.2017, 11:26 8
так же там не предусмотрен случай когда B[i] > B[min1] но при этом меньше B[min2]
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
33193 / 18514 / 3901
Регистрация: 12.02.2012
Сообщений: 31,100
Записей в блоге: 12
12.02.2017, 12:04 9
C
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
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  int X[]={1,2,-7,3,0,-6,3,5,2,-1,6,7,-12};
  int i,n;
  int max1=0,max2=0;
  n=sizeof(X)/sizeof(int);
  for (i=0; i<n; i++)
  {
      if (X[i]<0)
         if (max1==0)
             max1=X[i];
          else
             if (X[i]<=max1)
             {
                if (max2==0)
                   max2=X[i];
                else
                   if (max2 < X[i]) max2=X[i];   
             }      
             else
             {
                max2=max1;
                max1=X[i];
             }
  }
  if ((max1==0) && (max2==0)) 
     printf("Нет отрицательных элементов!\n");
  else
     if (max2==0)   
        printf("Единственный отрицательный=%d\n",max1);
     else
        printf("%d %d\n",max1,max2);
   
  system("PAUSE");  
  return 0;
}
2
1116 / 798 / 247
Регистрация: 30.06.2015
Сообщений: 4,192
Записей в блоге: 44
13.02.2017, 12:58 10
C
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
#include <stdio.h>
#include <stdlib.h>
int max_neg(int a[], int n)
{
    int i=0, max;
        while(a[i]>=0 && i<n)++i;
        max=i;
        for(i=1; i<n; ++i)
        {
            if (a[i]<0 && a[i]>a[max])max=i;
        }
    return max;
}
int main(void)
{
    int X[]={1,-2,7,-3,2,-6,3,5, 1,3};
    int n, in, max1=0,max2=0;;
    n=sizeof(X)/sizeof(int); if(n<2)return 0;
    max1=max_neg(X, n );
    in=X[max1]; X[max1]=0;//маскировка :))
    max2=max_neg(X, n );
    X[max1]=in;// восстанавливаем
    printf("%d X %d = %f\n",X[max1], X[max2], (double)(X[max1]*X[max2]));
    return 0;
}
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2017, 12:58
Помогаю со студенческими работами здесь

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

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

Найти произведение двух наибольших четных чисел массива
Найти произведение двух наибольших четных чисел массива

Найдите произведение двух крупнейших и двух наименьших отрицательных кратных 4 элементов исходного массива В (25)
Найдите произведение двух крупнейших и двух наименьших отрицательных кратных 4 элементов...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru