Pagini recente » Cod sursa (job #236798) | Cod sursa (job #1070620) | Cod sursa (job #1467770) | Cod sursa (job #1265711)
#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;
}