×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: C
Posted by: Damian Pytkowski
Added: Oct 22, 2016 9:47 AM
Views: 2133
Tags: no tags
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <time.h>
  4. #define LICZ 22
  5.  
  6. int Pow(int TWO,int M)
  7. {
  8.             int Product=1,i;
  9.             for(i=0;i<M;i++)
  10.             {
  11.             Product=Product * TWO;}
  12.  
  13.             return Product;
  14.  
  15. }
  16. void insertSort(int a[], int length)
  17. {
  18.     int i, j, value;
  19.  
  20.     for (i = 1; i < length; ++i) {
  21.         value = a[i];
  22.         for (j = i - 1; j >= 0 && a[j] > value; --j)
  23.             a[j + 1] = a[j];  
  24.         a[j + 1] = value;
  25.     }
  26. }
  27.  int loga2(int x )
  28. {
  29.   int ans = 0 ;
  30.   while( x>>=1 ) ans++;
  31.   return ans ;
  32. }
  33. int enterData(int dest[])
  34. {
  35.     //FILE *fr;
  36.     int i=0;
  37.     //if((fr=fopen("wartosci.txt","r"))==NULL)printf("Blad odczytu.");
  38.     scanf("%d",&dest[i]);
  39.     while(dest[i]!=0){
  40.         i++;
  41.         scanf("%d",&dest[i]);
  42.     }
  43.         //fclose(fr);
  44.         return i;
  45. }
  46. int sumuj(int arr[],int N)
  47. {
  48.         int i,suma=0;
  49.         for(i=0;i<N;i++)
  50.         {
  51.                 suma+=arr[i];
  52.         }
  53.         return suma;
  54. }
  55.  
  56. void usun(int arr[], int arrCls[],int N)
  57. {
  58.         FILE *fw;
  59.         int i,j=0;
  60.         if((fw=fopen("wartosci.txt","w"))==NULL)printf("Blad zapisu.");
  61.        
  62.         for(i=0;i<N;i++){
  63.                
  64.                 if(arr[i]==arrCls[j])
  65.                         j++;
  66.                 else    {
  67.                         fprintf(fw,"%d ",arr[i]);
  68.                 }              
  69.         }
  70.         fclose(fw);
  71. }
  72. void wyswDop(int arr[],int arrCls[],int N)
  73. {
  74.     int i,j=0;
  75.     for(i=0;i<N;i++){
  76.            
  77.             if(arr[i]==arrCls[j])
  78.                     j++;
  79.             else       
  80.                     printf("%d ",arr[i]);              
  81.     }
  82. }
  83.  
  84. void mieszaj(int arr[], int N)
  85. {
  86.     int i,los,los2,zast;
  87.     srand(time(NULL));
  88.     for(i=0;i<N;i++)
  89.     {
  90.             los=rand()%N;
  91.             los2=rand()%N;
  92.             zast=arr[los];
  93.             arr[los]=arr[los2];
  94.             arr[los2]=zast;
  95.     }
  96. }
  97. void wezPierwsze(int arr[],int arrDest[],int N1)
  98. {
  99.     int i;
  100.     for(i=0;i<N1;i++)
  101.             arrDest[i]=arr[i];
  102. }
  103.  
  104. void piszWartosc(int wart)
  105. {
  106.     FILE *fw;
  107.     if((fw=fopen("ceny.txt","a"))==NULL)printf("Blad zapisu.");
  108.    
  109.     fprintf(fw,"%d ",wart);
  110.     fclose(fw);
  111. }
  112. int main()
  113. {
  114.     int i,j,N,k,suma=0,cena,min,n,m,suma1,p,n1,stab,odejm=0;
  115.     int arr[100],wynik[24],tab2[50],mniejsza[24];
  116.     int *wskMn,*wskArr;
  117.     //int *wsk,nZ;
  118.     //char c;
  119.    
  120.     while(1){
  121.             wskArr=arr;
  122.             wskMn=mniejsza;
  123.             //wsk=arr;
  124.             n=0;
  125.             printf("Podaj cene: ");
  126.             scanf("%d",&cena);
  127. //             printf("Podaj wartosc do odjecia: ");
  128. //             scanf("%d",&odejm);
  129.             //cena-=odejm;
  130.            
  131.             N=enterData(wskArr);
  132.             //nZ=N;
  133.             if(N>LICZ)
  134.             {
  135.                     mieszaj(wskArr,N);
  136.                     wezPierwsze(wskArr,wskMn,LICZ);
  137.                     insertSort(wskArr,N);
  138.                     insertSort(wskMn,LICZ);
  139.                     wskArr=wskMn;
  140.                     stab=sumuj(wskArr,LICZ);
  141.                     N=LICZ;
  142.             }
  143.             else
  144.             {
  145.                     insertSort(wskArr,N);
  146.                     stab=sumuj(wskArr,N);
  147.             }
  148.             printf("Wczytano %d przedmiotow o wartosci %d.\n",N,stab);
  149.             min=5000;
  150.  
  151.            
  152.             for(j=Pow(2,N)-1;j>0;j--){
  153.                     k=j;
  154.                     p=0;
  155.                     while(k>0){
  156.                             if(k%2==1) {
  157.                                     suma+=wskArr[p];
  158.                                     tab2[n]=wskArr[p];
  159.                                     n++;
  160.                                     }
  161.                             k=k/2;
  162.                             p++;
  163.                     }
  164.                     if(suma>=cena){
  165.                             if(suma<min){
  166.                                     for(m=0;m<n;m++){
  167.                                                     wynik[m]=tab2[m];
  168.                                                     suma1=suma;
  169.                                             }
  170.                                             min=suma;
  171.                                             n1=n;      
  172.                                     }
  173.                             }
  174.                     suma=0;
  175.                     n=0;
  176.             }
  177.             printf("\n");
  178.            
  179.             printf("A : ");
  180.             wynik[n1]=0;
  181.             for(i=0;i<n1;i++)
  182.                     printf("%d ",wynik[i]);
  183.             printf("\t->\t%d\n",suma1+odejm);
  184.            
  185.             /*
  186.             wskArr=wsk;
  187.             N=nZ;
  188.             printf("\n");
  189.             printf("Czy usunac %d wartosci?\n",n1);fflush(stdin);
  190.             c=getchar();
  191.             c=getchar();
  192.             if(c!='n'){
  193.                     usun(wskArr,wynik,N);
  194.                     printf("*Usuwanie zakonczone.\n");
  195.                     printf("\n\n");
  196.             }
  197.             else{
  198.                     printf("\n\n");
  199.                     getchar();
  200.             } */
  201.     }
  202. }
  203.