Другие языки программирования и технологии

Дан массив из 20 элементов. Найти три «соседних» элементов, сумма значений которых максимальна. как это на СИ сделать?

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define n 20
#define e 3

int main() {
int a[n], c, s = 0, cm = 0, sm;

srand(time(NULL));
printf("random array:");
for (c = 0; c < n; ++c) printf(" %d", a[c] = rand() % 10);
for (c = 0; c < e; ++c) s += a[c];
sm = s;
for (; c < n; ++c) {
if ( (s += a[c] - a[c - e]) > sm ) {
sm = s;
cm = c - e + 1;
}
}
printf("\nmax sum: %d\nelements:", sm);
for (c = cm; c < cm + e; ++c) printf(" a[%d] = %d;", c, a[c]);

getchar();
return 0;
}
Дима Герасимович
Дима Герасимович
76 389
Лучший ответ
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
#define N 20
#define M 3
int main () {
int a[N], b[M], summa, max, n, index;
srand((unsigned)time(NULL));
while (1) {
for (n = 0; n < N; n++) a[n] = rand() % 90 + 10;
for (n = 0; n < N; n++) printf("%d ", a[n]);
summa = max = a[0] + a[1] + a[2];
index = 0;
for (n = M; n < N; n++) {
summa -= a[n - M];
summa += a[n];
if (summa > max) {
max = summa;
index = n - M + 1;
}
} printf("\n");
for (n = 0; n < M; n++) b[n] = a[index++];
for (n = 0; n < M; n++) printf("%d ", b[n]);
printf("\n\n");
_getch();
}
return 0;
}
DR
Didrich Raumhart
60 011
Не знал да забыл - хуже всего. Просто словами можешь описать, что нужно? Если нет, то тебе уже не помочь.

Похожие вопросы