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

  • Автор темы FenixGuard
  • Дата начала
F

FenixGuard

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

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

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

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


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

rlib

New member
25.04.2012
1
0
#2
Это школьные задачки или институтские?

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

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

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

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


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