Минимальное положительное и максимальное отрицательное

Дан массив A из N целых чисел. Найти и вывести минимальное положительное и максимальное отрицательное числа в этом массиве. Input В первой строке вводится целое число N (1<=N<=1000) — количество чисел в массиве A. Во второй строке вводятся N целых положительных чисел — элементы массива A (-10000<=Ai<=10000). Output Требуется вывести через пробел минимальное положительное и максимальное отрицательное числа в этом массиве. Выводить пробел в конце не нужно. Sample Input 7 1 2 -3 4 -5 0 6 Sample Output 1 -3

#include <stdio.h> 
int main() 
{ 
int i,n,a[20000],x,y; 
scanf("%d", &n); 
for (i=0; i<n; i++) 
scanf("%d", &a[i]); 
x=a[0];y=a[0];
for (i=0; i<n; i++) 
{
    if(x>a[i]&& a[i]>0) x=a[i];
    
}
 
for (i=0; i<n; i++) 
{
    if(y==a[i]) y=a[i];
    
}
for (i=0; i<n; i++) 
{
    if(y>a[i]) y=a[i];
    
}
for (i=0; i<n; i++) 
{
    if(y<a[i]&&a[i]<0) y=a[i];
    
}
printf("%d %d",x,y);
return 0; 
}

В чем может быть проблема, если код не работает только на 50%?


Ответы (2 шт):

Автор решения: user424333

если "на пальцах":

int plus,minus;

// элементы массива A (-10000<=Ai<=10000)

plus  = 10000;  // ищем минимальное положительное
minus = -10000; // ищем минимальное отрицательное

for i:= 0 to n-1 do
  begin
    if a[i] > 0
      then if a[i] < plus  then plus:= a[i]
                           else 
      else if a[i] > minus then minus:= a[i]
  end;

извините за мой Дельфийский, но смысл думается понятен ...

→ Ссылка
Автор решения: Damir Hakimof

Очень наивное решение:

#include <stdio.h> 
#include <limits.h>

// Мы уверены в том, что в массиве есть 
// и отрицательные, и положительные числа
int main() { 
  int minus = INT_MIN;
  int plus = INT_MAX;

  int N, number;
  scanf("%d", &N);

  for (int i = 0; i < N; ++i) {
    scanf("%d", &number);
    if (number > 0 && number < plus) {
      plus = number;
    }
    if (number < 0 && number > minus) {
      minus = number;
    }
  }

  printf("%d %d", plus, minus);

  return 0; 
}
→ Ссылка