Cod sursa(job #1265711)

Utilizator sebastian123aldea sebastian sebastian123 Data 17 noiembrie 2014 17:40:48
Problema Gutui Scor 50
Compilator c Status done
Runda teme_upb Marime 2.15 kb
#include<stdio.h>
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 inserare2(int a[],int n,int x)
{
	int i;
    for(i=n-1;i>=0&&x<a[i];i--)
    {
            a[i+1]=a[i];
    }
    a[i+1]=x;
}
void sortare(int a[],int n)
{
	int i,nb=1;
	for(i=1;i<n;i++)
	{
		inserare2(a,nb,a[i]);
		nb++;
	}
}

int main()
{
    int N,H,U,i,j,x,totalg=0,max1,max2,*h,*g,*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);
    h=(int*)malloc(N*sizeof(int));
    g=(int*)malloc(N*sizeof(int));
    culese=(int*)malloc(N*sizeof(int));
    for(i=0;i<N;i++)
    {
        fscanf(pFile,"%i",&h[i]);
        fscanf(pFile,"%i",&g[i]);
    }
    while(H>0)
    {
        max1=0;
        printf("Verific intre inaltimea maxima %i si inaltimea minima %i\n",H,H-U);
        for(i=0;i<N;i++)
        {
            if((h[i]>H-U)&&(h[i]<=H)&&(g[i]>max1))
            {
                max1=g[i];
                x=i;
            }
        }
        inserare(culese,index,max1);
        printf("gutuia maxima curenta %i\n",max1);
        index++;
        if(max1)
        {
            g[x]=0;
        }
        j=0;
        while(j<N)
        {
            max2=0;
            for(i=0;i<N;i++)
            {
                if((h[i]>H-U)&&(h[i]<=H)&&(g[i]>max2))
                {
                    max2=g[i];
                    x=i;
                }
            }
            if(max2>culese[0])
            {
                printf("Inlocuiesc Gutuia cea mai mica din vector= %i cu gutuia max2= %i\n\n",culese[0],max2);
                //Vectorul trebuie sa fie sortat dupa interschimbare
                culese[0]=max2;
                g[x]=0;
                sortare(culese,index);
            }
            j++;
        }
        H=H-U;
    }
    for(i=0;i<index;i++)
    {
        totalg=totalg+culese[i];
    }
    fprintf(dFile,"%i\n",totalg);
    fclose(pFile);
    fclose(dFile);
    return 0;
}