Найти максимальный из элементов массива, не являющихся ни локальным минимумом, ни локальным максимумом - 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; }
Объяснение кода листинга программы
- Объявлены переменные:
- i, j = 0, флаг, n, a, b, k, array[50], o = 0, max;
- n - количество элементов в массиве;
- a - указатель на массив;
- b - указатель на массив;
- k - счётчик;
- array[50] - массив для хранения значений;
- o - счётчик заполнения массива;
- max - переменная для хранения максимального значения.
- Ввод количества элементов в массив:
- printf (
Vvedine razmer:
); - scanf (
%d
,&n);
- printf (
- Выделение памяти под массив:
- a = (int )malloc(n sizeof(int));
- Ввод значений в массив:
- for (i=0;i<n;i++)
- printf (
Vvedine chislo [%d]:
,i); - 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++;
- }
- Заполнение массива:
- for (k=0; k<o; k++)
- {
- if (array[k]>max)
- max=array[k];
- }
- Вывод максимального значения:
- printf(
Maximal Element=%3d
,max);
- printf(
- Возврат 0, чтобы завершить работу программы.
- Вывод:
- getch ();
- return 0;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д