Pagini recente » Cod sursa (job #378671) | Cod sursa (job #866365) | Cod sursa (job #2290203) | Cod sursa (job #393710) | Cod sursa (job #630806)
Cod sursa(job #630806)
#include <stdio.h>
//#include <conio.h>
#include <stdlib.h>
void citire( int **sir, int *n){
int *vector, i;
FILE *f = fopen( "scmax.in", "rt");
if( !f){
printf( "\nFisierul nu poate fi deschis!!!");
exit( 0);
}
i = fscanf( f, "%i", n);
vector = (int*)calloc(*n,sizeof(int));
if(!vector)
return;
if( i != 0)
for( i = 0; i < *n; i++)
fscanf( f, "%i", &vector[ i]);
fclose( f);
*sir = vector;
return;
}
void scriere( int *sir, int n){
int i;
printf( "\nNumerele sunt:\n");
for( i = 0; i < n; i++)
printf( " %i", sir[ i]);
return;
}
int cmlung_subsir( int *sir, int n){
int i, j, cmlung = 0, pozitie = 0, k = 0, cm_precedent, poz_cm_prec, curent, max_vector;
int *vector;
int *final;
vector = (int *)calloc( n, sizeof( int));
if(!vector)
return -1;
final = (int *)calloc( n, sizeof( int));
if(!final)
return -1;
printf( "\n");
vector[ 0] = 1;
for( i = 1; i < n; i++){
//( in exact ordinea inversa)aici stabilesc maximul din vector si corespunzator lui sa fie in sir numarul mai mic decat numarul curent din sir
max_vector = 0;
for( k = 1; k <= i; k++)
if( sir[ i] > sir[ i - k]){
if( max_vector < vector[ i - k]){
max_vector = vector[ i - k];
}
}
vector[ i] = max_vector + 1;
}
for( k = 0; k < n; k++)
printf( " {%i", vector[ k]);
//getch();
cmlung = vector[ n - 1];
pozitie = n - 2;
for( i = n - 2; i >= 0; i--)
if( cmlung < vector[ i]){
pozitie = i;
cmlung = vector[ i];
}
printf( "\n");
i = pozitie + 1;
int po = 0;
final[ po++] = sir[ i];
while( i >= 0){
for( j = 1; j <= i; j++)
if( vector[ i] == vector[ i - j] + 1){
final[ po++] = sir[ i - j];
break;
}
i = i - j;
}
FILE *k = fopen( "scmax.out", "wt");
fprintf( k, "%i/n", po);
for( i = po; i >= 0; i--)
fprintf( k, "%i ", final[ i]);
fcolse( k);
return 1;
}
int main(){
int i, *sir_initial, n, k = 0;
citire( &sir_initial, &n);
scriere( sir_initial, n);
cmlung_subsir( sir_initial, n);
return 0;
}