Pagini recente » Cod sursa (job #1969882) | Cod sursa (job #2124811) | Cod sursa (job #169272) | Cod sursa (job #727621) | Cod sursa (job #2324587)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int ct; // Numarul de elemente
int starting_index; // Indexul de inceput
} seq;
void search(int n, int *v, FILE* out);
void print_sequence(seq *s, int *v ,FILE* out);
int main() {
int n, *v;
// Programare defensiva
FILE* in = fopen("scmax.in", "rt");
if (in == NULL) {
printf("Could not open the input file!\n");
return -1;
}
FILE* out = fopen("scmax.out", "wt");
if (out == NULL) {
printf("Could not open the output file!\n");
return -2;
}
// Citire
fscanf(in, "%d", &n);
v = malloc(n * sizeof(int));
for (int i = 0 ; i < n ; ++i) {
fscanf(in, "%d", &v[i]);
}
// Executie
search(n, v, out);
// Eliberare memorie
free(v);
fclose(in);
fclose(out);
return 0;
}
void search(int n, int *v, FILE* out) {
int i, prev = 0;
seq s, best;
best.ct = 0;
best.starting_index = 0;
s.ct = 0;
s.starting_index = 0;
for (i = 0 ; i < n ; ++i) {
if (v[i] > prev) {
s.ct++;
}
// Daca se termina secventa
if (v[i] < prev) {
// Verificam lungimile
if (s.ct > best.ct) {
best.ct = s.ct;
best.starting_index = s.starting_index;
}
s.ct = 1;
s.starting_index = i;
}
prev = v[i];
}
if (s.ct > best.ct) {
print_sequence(&s, v, out);
} else {
print_sequence(&best, v, out);
}
}
void print_sequence(seq *s, int *v ,FILE* out) {
int i = 0, prev = 0;
fprintf(out, "%d\n", s->ct);
while (i < s->ct) {
if (v[s->starting_index + i] != prev) {
fprintf(out, "%d ", v[s->starting_index + i]);
prev = v[s->starting_index + i];
} else {
s->ct++;
}
i++;
}
fprintf(out, "\n");
}