Другие языки программирования и технологии

Решите задачку на С (не на С++ и не на С#)

#include <stdio.h>

int find_min(int * A, int Len)
{
int Min = 1000;
int find = 0;
for (int x = 0; x < Len; x++)
{
if (A[x] > 0)
{
if (Min > A[x])
{
Min = A[x];
find = 1;
}
}
}
if (find) return Min;
else return 0;
}

int main(void)
{
int N = 0, Min = 0;
int B = 1000, L = -1000;
printf("Sample Input\n");
do
{
scanf("%d", &N);
if (N <= 0) printf("N должно быть больше нуля\n");
} while (N<=0);
int A[N];
for (int x=0; x<N; x++)
{
do
{
scanf("%d", &A[x]);
if (A[x] < L || A[x] > B)
printf("Значение должно быть в пределах от %d до %d\n", L, B);
} while (A[x] < L || A[x] > B);
}

Min = find_min(A, N);

printf ("Sample Output\n");
printf ("%d\n", Min);
for (int x = 0; x < N; x++)
{
printf ("%d ", A[x]);
}
putchar ('\n');

return 0;
}
Михаил Рыжихин
Михаил Рыжихин
92 784
Лучший ответ
Михаил Рыжихин Думаю в функции find_min() нужно написать if (Min >= A[x]),
потому что может попасться число 1000.
находим индекс первого положительного элемента и ищем индекс положительного числа, которое больше него.
auto it = min_element(find_if(v.begin(),v.end(), [](int a) {return a > 0;}), v.end(), [](int a, int b) { return a < b && a > 0; });
cout << (it != v.end() ? *it : 0);
ЮГ
Юрий Губанов
25 445