Problema spectacolelor in limbajul C(metoda Greedy)

#include<stdio.h>

int n,inceput[100],sfarsit[100],nr[100];

void citeste();
void sorteaza();
void rezolva();

int main()
{
freopen("spectacole.in","r",stdin);
freopen("spectacole.out","w",stdout);

citeste();
sorteaza();
rezolva();

fclose(stdin); fclose(stdout);
return 0;
}

void rezolva()
{
int ultim,i;
for(ultim = 0,i = 1; i < n; i++)
if(inceput[nr[i]] >= sfarsit[nr[ultim]]) // selectam spectacolul ce ne avantajeaza
{
printf("%d ",nr[i]+1); ultim = i;
}
printf("\n");

}

void sorteaza() //ordonam crescator spectacolele dupa ora de final
{
int schimb,i,aux;
do
{
schimb = 0;
for(i = 0; i < n-1; i++)
if(sfarsit[nr[i]] > sfarsit[nr[i+1]])
{
aux = nr[i];
nr[i] = nr[i+1];
nr[i+1] = aux;
schimb = 1;
}
}while(schimb);
}

void citeste()
{
int i,m,h;
scanf("%d",&n);
for(i = 0; i < n; i++)
{
nr[i] = i+1;
scanf("%d %d",&h,&m);
inceput[i] = h * 60 + m; //pentru fiecare spectacol transformam ora de inceput in minute

scanf("%d %d",&h,&m); //pentru fiecare spectacol transformam ora de sfarsit in minute
sfarsit[i] = h * 60 + m;
}
}

Problema rucsacului in limbajul C

#include<stdio.h>
int o[50]; //ordinea obiectelor
float c[100],g[100],x[100],Gr,GMax;
int n;

void citeste();
void sorteaza();
void rezolva();
void afiseaza();

int main()
{

freopen("rucsac.in","r",stdin);
freopen("rucsac.out","w",stdout);

citeste();
sorteaza();
rezolva();
afiseaza();

fclose(stdin); fclose(stdout);
return 0;
}

void citeste()
{
scanf("%d%e",&n,&GMax);
for(int i = 0; i < n; i++)
{
o[i] = i;
scanf("%e%e",&c[i],&g[i]); //citim valorile
}
}

void sorteaza()
{
int i,schimb,aux;
do //ordonam obiectele descrescator dupa castigul unitar
{
schimb = 0;
for(i = 0; i < n-1; i++)
if(c[o[i]]/g[o[i]] < c[o[i+1]]/g[o[i+1]])
{
aux = o[i];
o[i] = o[i+1];
o[i+1] = aux;
schimb = 1;
}
}while(schimb);
}

void rezolva()
{
int i;
for(i = 0,Gr = GMax; i < n && Gr > g[o[i]]; i++)
{
x[o[i]] = 1; Gr-= g[o[i]];
}
}

void afiseaza()
{
for(int i = 0; i < n; i++)
if(x[i]) printf("%d %e \n",i+1,x[i] * 100);