В массиве найти второе по величине число

locusman

Составить программу, которая в массиве А[N] находит второе по величине число (вывести это число).
6 ответов

locusman

#include <stdio.h>
 
int* func(int a[], unsigned n) {
    if (n < 2) {
        return NULL;
    }
 
    int* max = a, * prev = a + 1, * p;
 
    if (*max < *prev) {
        prev = a;
        max = a + 1;
    }
 
    for (p = a + 2; p < (a + n); ++p) {
        if (*max < *p) {
            prev = max;
            max = p;
        }
        else if (*prev < *p) {
            prev = p;
        }
    }
    return prev;
}
 
int main() {
    int a[] = {1, 3, 2, 4, 9, 7, 8, 6, 5};
 
    printf("%d\n", *func(a, 9));
 
    return 0;
}


locusman

func(int a[], unsigned n) - можно это как-то по другому решить, не через func?


locusman

func(int a[], unsigned n) - можно это как-то по другому решить, не через func?
Можно


locusman

Подскажите пожалуйста как именно?


locusman

без указателей и без функций
#include <stdio.h>
#define N 10
 
 
int main() {
    int a[N]={1,200,39,4,5,10,6,9,8,7};
    int i,max,secmax;
    max=secmax=a[0]; // присваиваем максимумам (первому и второму) значение первого элемента
    for(i=0;i<N;i++)
        if(a[i]>max)      //поиск первого максимума
            max=a[i]; 
 
    for(i=0;i<N;i++)
        if(a[i]<max && a[i]>secmax) //поиск элемента который меньше максимума и больше всех других(второй максимум)
            secmax=a[i];
    printf("Second maximum is: %d\n",secmax);
    return 0;
}


locusman

Два цикла - это не комильфо.
#include <stdio.h>
 
int main(void) {
    long arr[] = { 123, 3, 33, 55, 2342, 9, 320 };
    long fst_max = arr[0];
    long snd_max = arr[0];
    for (size_t i = 1; i < sizeof(arr) / sizeof(arr[0]); i++) {
        if (arr[i] > fst_max) {
            snd_max = fst_max;
            fst_max = arr[i];
        } else if (arr[i] > snd_max) {
            snd_max = arr[i];
        }
    }
    printf("%ld %ld\n", fst_max, snd_max);
    return 0;
}