Cod sursa(job #438273)

Utilizator zdocAnghel Dan-Adrian zdoc Data 10 aprilie 2010 17:10:14
Problema Gutui Scor 0
Compilator cpp Status done
Runda teme_upb Marime 3.56 kb
#include <stdio.h>
#include <stdlib.h>

FILE *f;

typedef struct gutui
{
        int N;// numarul de gutui din copac
        int H;// inaltimea maxima la care ajunge Gigel 
        int U;// cu cat se ridica crengile copacului dupa culegerea unei gutui
        int v[100000];// vector in care retin inaltimea si greutatea gutuilor
        int inaltime;// inaltimea si greutatea gutuilor din copac
        int greutate;  
        int greutate_maxima ;// greutatea maxima a gutuilor pe care le poate culege Gigel     
}date_gutui;


void read_file (const char *fis)
{
    int i,k;
    date_gutui gutui;
    printf ("ana are mere\n");
    f = fopen (fis, "r");
    fscanf (f, "%d", gutui.N); // numarul de gutui din copac
    fscanf (f, "%d", gutui.H); // inaltimea maxima la care ajunge Gigel 
    fscanf (f, "%d", gutui.U); // cu cat se ridica crengile copacului dupa culegerea unei gutui
    
    // pe urmatirele N linii ale fisierului sunt date referitoare la inaltimea si greutatea gutuilor din copac
   	k = 2*gutui.N ;// vectorul are (2*nr de gutui) elemente pt ca pt fiecare gutuie am o inaltime si o greutate 
    for(i=0; i<k; i++) 
   	{
             // inaltimea si greutatea gutuilor le bag intr-un vector
             fscanf (f, "%d", gutui.v[i]);
             
    }
	fclose(f);
	
}
void print_file (const char *fis)
{
     printf("ana are gutui?");
     date_gutui gutui;
     f = fopen(fis, "w");
     //fprintf (f, "%d", gutui.N);// vreau sa scriu orice dar nu merge........?????????
     fprintf (f, "%d", gutui.greutate_maxima);
}
void culegGutui()
{
     int i,k,max=0;
     date_gutui gutui;
     k = 2*gutui.N;
     // parcurg vectorul cu inaltimile respectiv greutatile gutuilor
     for(i=0; i<k; i++)
     {
              // vreau sa aleg gutuia cu inaltimea cea mai mare
              if (gutui.v[i%2] > max) // v[i]%2 reprezinta elementele pare din vectorul v adica inaltimile gutuilor fata de sol
              {
                         max = gutui.v[i%2];// max va fi gutuia cu inaltimea cea mai mare fata de sol
                         k = k-1; // aici culeg gutuia care se afla la inaltimea maxima (adica o elimin din vector)
                         gutui.greutate_maxima = gutui.greutate_maxima + gutui.v[(i%2)+1] ; // aici e "cantarul"
              
                         // dupa ce aflu maximul si-l "culeg" vreau ca celelalte elementele PARE din vector sa creasca cu U
                         // adica vreau sa adum U la inaltimilecelorlalte gutui
                         for (i=0; i<k; i++)
                         {
                             if (gutui.v[i%2] != 0)
                             {
                                   // cresc inaltimile cu U           
                                   gutui.inaltime = gutui.v[i%2] + gutui.U;
                                   if (gutui.inaltime <= gutui.H) //daca inaltimile gutuilor nu sunt mai mari decat inaltimeali gigel
                                   {
                                          gutui.greutate_maxima = gutui.greutate_maxima + gutui.v[(i%2)+1]; 
                                   }
                                   
                             }
                             
                         }
                         
                }
                                        
                              
              
     }
         
}


int main()
{
    
    read_file("gutui_in.txt");
    printf("ana are si pere\n");
    void culegeGutui();
    print_file("gutui_out.txt");
    
    return 0;
}