Advertisement
Guest User

ES 6.1

a guest
Nov 22nd, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define filename "prodotti.txt"
  6. #define MAXC 25
  7.  
  8. typedef struct {
  9.     char  *nome;
  10.     float prezzo;
  11. }dettaglio;
  12.  
  13. void comb_sempl(dettaglio *val,int k,float b,float *prezzo,char **sol,int n,int pos,int start)
  14. {
  15.     int i;
  16.  
  17.     if(pos>=k && (*prezzo-val[start-1].prezzo)<=b)
  18.     {
  19.             printf("{");
  20.             for(i=0;i<k;i++)
  21.             {
  22.                 if(i!=k-1)
  23.                     printf("%s, ",sol[i]);
  24.                 else
  25.                     printf("%s",sol[i]);
  26.             }
  27.             printf("}\n");
  28.         return;
  29.     }
  30.  
  31.     for(i=start;i<n;i++)
  32.     {
  33.         sol[pos]=strdup(val[i].nome);
  34.         *prezzo+=val[i].prezzo;
  35.         comb_sempl(val,k,b,prezzo,sol,n,pos+1,i+1);
  36.         *prezzo=0.0;
  37.     }
  38.     return;
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44.     FILE *in;
  45.     int i,P,K;
  46.     float B,prezzo=0.0;
  47.     char buf[MAXC+1];
  48.     dettaglio *lista;
  49.     char **sol;
  50.  
  51.     in=fopen(filename,"r");
  52.  
  53.     if(in==NULL)
  54.         return -1;
  55.  
  56.     fscanf(in,"%d",&P);
  57.  
  58.     lista=malloc(P*sizeof(dettaglio));
  59.  
  60.  
  61.     for(i=0;i<P;i++)
  62.     {
  63.         fscanf(in,"%s %f",buf,&lista[i].prezzo);
  64.         lista[i].nome=strdup(buf);
  65.     }
  66.  
  67.     fclose(in);
  68.  
  69.     printf("Inserisci il numero minimo di prodotti: ");
  70.     scanf("%d",&K);
  71.  
  72.     sol=malloc(K*sizeof(char*));
  73.  
  74.     printf("Inserisci il valore del budget: ");
  75.     scanf("%f",&B);
  76.  
  77.     comb_sempl(lista,K,B,&prezzo,sol,P,0,0);
  78.  
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement