Cod sursa(job #630830)

Utilizator dcarbunescucarbunescu dcarbunescu Data 6 noiembrie 2011 17:13:09
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.24 kb
#include <stdio.h>
//#include <conio.h>
#include <stdlib.h>

int sir_maxim = 0;
int vector_maxim[ 10000] = { 0};

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);
    }

    vector = new int[ 10000];

    for( i = 0; i < 10000; i++)
        vector[ i] = 0;

    i = fscanf( f, "%i", n);

    *n = *n + 2;
    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 - 1; i++)
        printf( " %i", sir[ i]);

}

void tiparire( int *sir, int k){

    int i;

    //for( i = 0; i < k; i++){
    //    printf( " %i", sir[ i]);
    //}

    if( sir_maxim < k){

        sir_maxim = k;
        for( i = 0; i < k; i++){
            vector_maxim[ i] = sir[ i];
        }
    }

    return;
}

int verificare( int *viz, int k)
{
    if(k==0)
        return 1;
    if( viz[ k - 1] >= viz[ k])
        return 0;

    return 1;
}

void cm_lung_subsir( int k, int *sir_initial, int n, int **viz, int prec){

    int i;
    int *vector = *viz;

    for( i = prec; i < n - 1; i++){

        *viz = vector;//merge si-aici
        vector[ k] = sir_initial[ i];

        if( verificare( *viz, k)){

            //printf( "\n");
            tiparire( *viz, k + 1);
            cm_lung_subsir( k + 1, sir_initial, n, viz, i);
        }

    }

    return;
}

int main(){

    int i, *sir_initial, n, k = 0;
    int *viz;
    int *final;

    viz = (int *)calloc( n, sizeof( int));
    if( viz == NULL) exit( 1);

    final = (int *)calloc( n, sizeof( int));
    if(!final)
        return -1;

    citire( &sir_initial, &n);
    //scriere( sir_initial, n);
    cm_lung_subsir( 0, sir_initial, n, &viz, 0);

    //printf( "\nSirul maxim este:\n");
    FILE *kf = fopen( "scmax.out", "wt");
    //printf( "po:%i", po);

    for( i = 0; i < sir_maxim; i++)
        //printf( " %i", vector_maxim[ i]);
        fprintf( kf, "%i ", final[ i]);

    fclose( kf);

    return 0;
}