Cod sursa(job #1324723)

Utilizator sebastian123aldea sebastian sebastian123 Data 22 ianuarie 2015 18:49:00
Problema Gutui Scor 60
Compilator c Status done
Runda teme_upb Marime 2.68 kb
#include<stdio.h>
typedef struct gutui1
{
    int g,h;
}gutui1;

void inserare(int a[20],int n,int x)
{
    int i;
    if(x>a[n-1])
	{
		a[n]=x;
	}
	for(i=n-1;i>=0&&x<a[i];i--)
    {
        a[i+1]=a[i];
    }
    a[i+1]=x;
}
void inserare_cu_n_constant(int a[],int n,int x)
{
    int i;
    for(i=1;x>a[i];i++)
    {
        a[i-1]=a[i];
    }
    a[i-1]=x;
}
int caut_max(int N,gutui1 *gutui,int H,int U,int *p)
{
    int i,max=0;
    for(i=0;i<N;i++)
    {
        if((gutui[i].h>H-U)&&(gutui[i].h<=H)&&(gutui[i].g>max))
        {
            max=gutui[i].g;
            *p=i;
            return max;// prima gasita e returnata
        }
    }
    return max;
}

void sortare_gutui(gutui1 *gutui,int N)
{
    int i,j;
    gutui1 aux;
    for(i=0;i<N;i++)
    {
        for(j=i+1;j<N;j++)
        {
            if(gutui[i].g<gutui[j].g)
            {
                aux=gutui[j];
                gutui[j]=gutui[i];
                gutui[i]=aux;
            }
        }
    }
}

int main()
{
    int N,H,U,i,j,x,y,totalg=0,max,*culese,index=0;
    FILE * pFile = fopen("gutui.in","r");
    FILE * dFile = fopen("gutui.out","w");
    fscanf(pFile,"%i",&N);
    fscanf(pFile,"%i",&H);
    fscanf(pFile,"%i",&U);
    gutui1 *gutui;
    gutui=(gutui1 *)malloc(N*sizeof(gutui1));

    culese=(int*)malloc(N*sizeof(gutui1));

    for(i=0;i<N;i++)
    {
        fscanf(pFile,"%i",&gutui[i].h);
        fscanf(pFile,"%i",&gutui[i].g);
    }
    sortare_gutui(gutui,N);

    for(i=0;i<N;i++)
    {
        printf("%i ",gutui[i].h);
        printf("%i\n",gutui[i].g);
    }
    while(H>0)
    {
        printf("Verific intre inaltimea maxima %i si inaltimea minima %i\n",H,H-U);
        max=caut_max(N,gutui,H,U,&x);
        inserare(culese,index,max);
        printf("gutuia maxima curenta %i\n",max);
        index++;
        if(max)
        {
            gutui[x].g=0;
        }
        for(j=0;j<N;j++)
        {
            max=caut_max(N,gutui,H,U,&x);
            if(max>culese[0])
            {
                printf("Inlocuiesc Gutuia cea mai mica din vector= %i cu gutuia max2= %i\n\n",culese[0],max);
                gutui[x].g=0;
                inserare_cu_n_constant(culese,index,max);
            }
            else
            {
                break;
            }
        }
        H=H-U;
        for(y=0;y<N;y++)
        {
            printf("%i ",gutui[y].h);
            printf("%i\n",gutui[y].g);
        }
    }
    for(i=0;i<index;i++)
    {
        totalg=totalg+culese[i];
    }
    printf("total=%i",totalg);
    fprintf(dFile,"%i\n",totalg);
    fclose(pFile);
    fclose(dFile);
    return 0;
}