Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Cosfar
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 58
1

Найти минимальное положительное и максимальное отрицательное числа, не входящие в вектор

17.06.2015, 10:30. Просмотров 1007. Ответов 2
Метки нет (Все метки)

В целочисленном векторе найти минимальное положительное и максимальное отрицательное числа, не входящие в этот вектор. Предусмотреть случай, когда таких элементов нет.

Входные данные:
n=10
v_min=-5
v_max=10
Исходный вектор:
7 3 1 -5 -2 5 2 0 8 1

Выходные данные:
min_pol_not=4
max_otr_not=-1


делал на паскале через множества тут такое не прокатит=(
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2015, 10:30
Ответы с готовыми решениями:

Найти минимальное положительное число и максимальное отрицательное число среди заданных
Дано N действительных случайных чисел в диапазоне от -100 до 100. Найти минимальное положительное...

Найти максимальное или минимальное числа в массиве
Привет всем! У меня есть такая задач: Должен найти максимальное, или минимальное числа в массиве....

Найти минимальное положительное и максимальное отрицательное числа, не входящие в вектор
Задание: в целочисленном векторе vector найти минимальное положительное и максимальное...

В файле найти первое положительное и последнее отрицательное числа
Есть программа, которая в файле находит первое положительное и последнее отрицательное числа и...

Найти минимальное положительное числа из набора
Дано целое число n и набор из N чисел найти минимальное положительное число из данного набора Если...

2
HighPredator
5698 / 2022 / 723
Регистрация: 10.12.2010
Сообщений: 5,798
Записей в блоге: 3
22.06.2015, 14:06 2
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef enum
{
  no_error,
  error_invalid_arguments,
  error_mem_alloc,
  error_pos_no_exist,
  error_neg_no_exist
} TErrorCodes;
 
int compareAsc(const void* a, const void* b)
{
  return (*(int*)a - *(int*)b);
}
 
int compareDesc(const void* a, const void* b)
{
  return (*(int*)b - *(int*)a);
}
 
int FindValues(int* const arr, const int N, int* const minPositivePtr, int* const maxNegativePtr)
{
  int errorCode = no_error;
  int positivesCount = 0;
  int negativesCount = 0;
  int minPositive = 0;
  int maxNegative = 0;
  int i = 0;
 
  int* positives = NULL;
  int* negatives = NULL;
 
 
  if ((arr == NULL) || (minPositivePtr == NULL) || (maxNegativePtr == NULL) || (N <= 0))
  {
    errorCode = error_invalid_arguments;
  }
  else
  {
    positives = malloc(N * sizeof(*positives));
 
    if (positives != NULL)
    {
 
      negatives = malloc(N * sizeof(*negatives));
 
      if (negatives != NULL)
      {
        memset(positives, 0, N * sizeof(*positives));
        memset(negatives, 0, N * sizeof(*negatives));
 
        positivesCount = 0;
        negativesCount = 0;
 
        for(i = 0; i < N; i++)
        {
          if (arr[i] > 0)
          {
            positives[positivesCount] = arr[i];
            positivesCount++;
          }
          
          if (arr[i] < 0)
          {
            negatives[negativesCount] = arr[i];
            negativesCount++;
          }
        }
 
        if (positivesCount == 0)
        {
          errorCode = error_pos_no_exist;
        }
        else
        {
          qsort(positives, positivesCount, sizeof(*positives), compareAsc);
 
          minPositive = positives[0];
 
          while (bsearch(&minPositive, positives, positivesCount, sizeof(*positives), compareAsc) != NULL)
          {
            minPositive++;
          }
 
          (*minPositivePtr) = minPositive;
        }
 
        if (negativesCount == 0)
        {
          errorCode = error_neg_no_exist;
        }
        else
        {
          qsort(negatives, negativesCount, sizeof(*negatives), compareDesc);
 
          maxNegative = negatives[0];
 
          while (bsearch(&maxNegative, negatives, negativesCount, sizeof(*negatives), compareDesc) != NULL)
          {
            maxNegative++;
          }
 
          (*maxNegativePtr) = maxNegative;
        }
 
        free(positives);
        free(negatives);
      }
      else
      {
        free(positives);
        errorCode = error_mem_alloc;
      }
    }
    else
    {
      errorCode = error_mem_alloc;
    }
  }
 
  return errorCode;
}
 
int main(void)
{
  int a[] = {7, 3, 1, -5, -2, 5, 2, 0, 8, 1};
 
  int minPositive = 0;
  int maxNegative = 0;
  int errorCode = 0;
 
  errorCode = FindValues(&a[0], 10, &minPositive, &maxNegative);
 
  switch (errorCode)
  {
  case no_error:
    {
      printf("Minimal positive not present: %d\n"
          "Maximal negative not present: %d\n",
          minPositive,
          maxNegative);
      break;
    }
  case error_invalid_arguments:
    {
      printf("Error: invalid arguments!\n");
      break;
    }
  case error_mem_alloc:
    {
      printf("Error: failed to allocate memory!\n");
      break;
    }
  case error_neg_no_exist:
    {
      printf("Warning: negatives not present.\n"
          "Minimal positive not present: %d\n",
          minPositive);
      break;
    }
  case error_pos_no_exist:
    {
      printf("Warning: positives not present.\n"
          "Maximal nagative not present: %d\n",
          maxNegative);
      break;
    }
  default:
    {
      abort();
    }
  }
  return 0;
}
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10297 / 6179 / 1555
Регистрация: 25.07.2009
Сообщений: 11,762
25.06.2015, 01:29 3
Лучший ответ Сообщение было отмечено Cosfar как решение

Решение

Цитата Сообщение от Cosfar Посмотреть сообщение
Предусмотреть случай, когда таких элементов нет.
А куда бы они, интересно, делись, если нужно найти
Цитата Сообщение от Cosfar Посмотреть сообщение
числа, не входящие в этот вектор
при этом минимальное положительное целое число 1, а максимальное отрицательное -1
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
#include <stdio.h>
 
int * find(const int * array, const size_t count, const int value) {
    return ( ! count ) ? NULL : ( *array == value ) ? (int*)array : find(array + 1, count - 1, value);
}
 
void dump(const int * array, size_t count) {
    while ( count-- )
        printf("%3d%c", *array++, ( count ) ? ' ' : '\n');
}
 
#define ROWS 3
#define COLUMNS 5
 
int main(void) {
    int tests[ROWS][COLUMNS] = {
        { 3, 1, -2, 4, -5 },
        { 5, 6, 7, 8, 9 },
        { -3, -8, -1, -9, -5 }
    };
    int i, n;
    
    for ( i = 0; i < ROWS; ++i ) {
        printf("Test #%d\nArray:\n", i + 1);
        dump(tests[i], COLUMNS);
        for ( n = 1; find(tests[i], COLUMNS, n); ++n )
            ;
        printf("Min positive number not in array: %d\n", n);
        for ( n = -1; find(tests[i], COLUMNS, n); --n )
            ;
        printf("Max negative number not in array: %d\n\n", n);
    }
    
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2015, 01:29

Даны три числа. Найти среди них максимальное отрицательное число
Всем примет, начал изучать Visual Basic никак не могу решить задачу. Даны три числа. Найти среди...

Найти минимальное положительное целое число Q такое, что произведение цифр числа Q в точности равняется N
Ваша задача — найти минимальное положительное целое число Q такое, что произведение цифр числа Q в...

Найти минимальное из первого и второго числа или максимальное из третьего числа
Используя 2 зависимых переключателя, решить: Зависимости от выбора, найти минимальное из первого и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru