Работа С Массивами (язык С)

Тема в разделе "C/C++/C#", создана пользователем FenixGuard, 28 апр 2012.

  1. FenixGuard

    FenixGuard Гость

    Доброго времени суток!
    Пришел на Ваш форум за помощью. Необходимо решить 3 задачи, а вот у самого не получается, есть коды для начала программы, прогона массива через функцию srand, для поиска максимального и минимального значения в массиве, но вот как решить это я не пойму. Пожалуйста, если не код, то хоть какие-то подсказки, наводки.

    1) Дан массив размера N. Определить, существуют ли в массиве три последовательных элемента, образующих арифметическую или геометрическую прогрессию. Если существуют, то вывести их на экран, указав их значения и индексы.

    2) Известна высота над уровнем моря каждого километра 100-километровой автотрассы. Определить, на каком расстоянии от начала автотрассы начинается и заканчивается первый самый длинный участок с непрерывным подъемом.

    3) Дан целочисленные массив размера N. Определить максимальное количество его одинаковых элементов.


    Буду очень благодарен за помощь!
     
  2. rlib

    rlib New Member

    Регистрация:
    25 апр 2012
    Сообщения:
    1
    Симпатии:
    0
    Это школьные задачки или институтские?

    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #define N 7

    void report(int e1, int e2, int e3, int progCnt, char *progName) {
    printf("%s progression #%d:\na1=%d,a2=%d,a3=%d\n\n", progName, progCnt, e1, e2, e3);
    }

    void findSeq(int arr[N]) {
    int i, foundGeom, foundAlg;
    if (N<3) {
    printf("Array should be at least 3 elements");
    exit(0);
    }
    foundGeom = 0;
    foundAlg = 0;
    for (i=0; i<N-2; ++i) {
    if ( arr[i]-arr[i+1] == arr[i+1]-arr[i+2]) {
    ++foundAlg;
    report(arr[i],arr[i+1],arr[i+2], foundAlg, "algebraic");
    }
    if ( arr[i]/arr[i+1]==arr[i+1]/arr[i+2]) {
    ++foundGeom;
    report(arr[i],arr[i+1],arr[i+2], foundGeom, "geometric");
    }
    }
    if (foundGeom == 0)
    printf("Found zero geometric progressions\n");
    if (foundAlg == 0)
    printf("Found zero algebraic progressions\n");
    }

    int compare(const void *e1, const void *e2) {
    if ( *(int*)e1 == *(int*)e2 )
    return 0;
    if ( *(int*)e1 > *(int*)e2 )
    return 1;
    else
    return -1;
    }


    int maxEqualElems(int arr[N]) {
    int reps[N]={0},i,t;
    qsort(arr, N, sizeof(int), compare);
    for (i=0; i<N-1; ++i) {
    if (arr[i]==arr[i+1])
    reps[i+1] = reps[i]+1;
    }
    t=reps[0];
    for (i=1; i<N; ++i)
    if (reps[i]>t)
    t=reps[i];
    return t+1;
    }

    int Ex2(int arr[N]) {
    int reps[N]={0}, i, t, dist;
    for (i=0; i<N-1; ++i) {
    if (arr[i]==arr[i+1])
    reps[i+1] = reps[i]+1;
    }
    t=reps[0];
    for (i=1; i<N; ++i)
    if (reps[i]>t) {
    t=reps[i];
    dist = i+1-reps[i];
    }
    return dist;
    }

    int main(void)
    {
    int arr[N]={3,3,6,6,6,11,12};
    findSeq(arr);
    printf("Max equal elems=%d\n", maxEqualElems(arr));
    printf("Distance (elem number, based on 1): %d\n", Ex2(arr));
    return 0;
    }
     
Загрузка...
Похожие Темы - Работа Массивами (язык
  1. Fazer77777
    Ответов:
    1
    Просмотров:
    902
  2. jaDakiss
    Ответов:
    1
    Просмотров:
    1.045
  3. NicePlant
    Ответов:
    1
    Просмотров:
    1.112
  4. Andrey Kha
    Ответов:
    0
    Просмотров:
    32
  5. Hoasker
    Ответов:
    0
    Просмотров:
    65

Поделиться этой страницей