Найти максимальный из элементов массива, не являющихся ни локальным минимумом, ни локальным максимумом - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста найти ошибку в решении задачи с массивами. Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным минимумом, ни локальным максимумом. Если таких элементов в массиве нет, то вывести 0. локальный минимум — это элемент, который меньше любого из своих соседей локальный максимум — это элемент, который больше любого из своих соседей
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
    int i,j=0,flag,n,*a,*b,k;
    printf ("Vvedine razmer:");
    scanf ("%d",&n);
    a = (int *)malloc(n * sizeof(int));
    for (i=0;i<n;i++)
    {
     printf ("Vvedine chislo [%d]:",i);
     flag=scanf ("%d",&a[i]);
     if(flag!=1)
     exit (-1);
    }
    for (i=1;i<n-1;i++)
    {
       if(((a[i]<=a[i+1])&&(a[i]>=a[i-1]))||((a[i]>=a[i+1])&&(a[i]<=a[i-1])))
       {
          j++;
          if(j==1)
          {b = (int *)malloc(j * sizeof(int));}
          else
          b = (int *)realloc(b,j * sizeof(int));
          b[j]=a[i];
          printf ("%d\n",j);/*количество элементов нового массива*/
       }
    }
    if(j==0)
    {
       printf ("0\n");
    }
    else
    {
    for(i=0;i<j;i++)
    {
        printf ("%d\n",b[i]);/*элементы нового массива*/
    }
    printf ("\n");
    for (i=0;i<j;i++)
    {
        if(b[i]>b[i+1])
        {
          k=b[i];
          b[i]=b[i+1];
          b[i+1]=k;
        }
    }
    for (i=0;i<j;i++)
    {
        printf ("%d",b[i]); /*упорядоченные элементы нового массива*/
    }
    }
    getch ();
    return 0;
}

Решение задачи: «Найти максимальный из элементов массива, не являющихся ни локальным минимумом, ни локальным максимумом»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main ()
{
    int i,j=0,flag,n,*a,*b,k,array[50],o=0,max;
    printf ("Vvedine razmer:");
    scanf ("%d",&n);
    int m=0,x=0;
    a = (int *)malloc(n * sizeof(int));
    for (i=0;i<n;i++)
    {
     printf ("Vvedine chislo [%d]:",i);
     flag=scanf ("%d",&a[i]);
    }
    for (i=1;i<n-1;i++)
    {
       if ((a[i]<=a[i+1])&&(a[i]<=a[i-1])) //min
        printf("Min: %d\n",a[i]);
         else
          {
           m=a[i];
           printf("Nemin===%d\n",m);
          }
       if ((a[i]>=a[i+1])&&(a[i]>=a[i-1]))   //Max
        printf("Max: %d\n",a[i]);
         else
          {
           x=a[i];
           printf("Nemax===%d\n",x);
          }
       if (m==x)
        {
         printf ("Ne max/Ne min==%d\n",m);  //не минимум/не максимум, отправляем его в Mass
         array[o]=m;
         printf ("Mass= =%d\n", array[o]);
         o++;
        }
    }
    printf("\n");
    max=array[0];
    for (k=0; k<o; k++)
     {
      if (array[k]>max)
       max=array[k];
     }
    printf("Maximal Element=%3d",max);
    getch ();
    return 0;
}

Объяснение кода листинга программы

  1. Объявлены переменные:
    • i, j = 0, флаг, n, a, b, k, array[50], o = 0, max;
    • n - количество элементов в массиве;
    • a - указатель на массив;
    • b - указатель на массив;
    • k - счётчик;
    • array[50] - массив для хранения значений;
    • o - счётчик заполнения массива;
    • max - переменная для хранения максимального значения.
  2. Ввод количества элементов в массив:
    • printf (Vvedine razmer:);
    • scanf (%d,&n);
  3. Выделение памяти под массив:
    • a = (int )malloc(n sizeof(int));
  4. Ввод значений в массив:
    • for (i=0;i<n;i++)
    • printf (Vvedine chislo [%d]:,i);
    • scanf (%d,&a[i]);
  5. Поиск минимального значения:
    • for (i=1;i<n-1;i++)
    • if ((a[i]<=a[i+1])&&(a[i]<=a[i-1])) //min
    • printf(Min: %d\n,a[i]);
    • else
    • {
    •  m=a[i];
    •  printf(Nemin===%d\n,m);
    • }
  6. Поиск максимального значения:
    • if ((a[i]>=a[i+1])&&(a[i]>=a[i-1]))   //Max
    • printf(Max: %d\n,a[i]);
    • else
    • {
    •  x=a[i];
    •  printf(Nemax===%d\n,x);
    • }
  7. Если минимальное и максимальное значения совпадают, то это значение отправляется в массив:
    • if (m==x)
    • {
    •  printf (Ne max/Ne min==%d\n,m);  //не минимум/не максимум, отправляем его в Mass
    •  array[o]=m;
    •  printf (Mass= =%d\n, array[o]);
    •  o++;
    • }
  8. Заполнение массива:
    • for (k=0; k<o; k++)
    • {
    •  if (array[k]>max)
    •  max=array[k];
    • }
  9. Вывод максимального значения:
    • printf(Maximal Element=%3d,max);
  10. Возврат 0, чтобы завершить работу программы.
  11. Вывод:
    • getch ();
    • return 0;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы