Advertisement
Guest User

Euler 93

a guest
Apr 22nd, 2013
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.19 KB | None | 0 0
  1.   int number = 0;
  2.   int maxi = 0;
  3.   vector<char> oper({'+','-','*','/','\\'});
  4.   vector<int> best;
  5.   vector<int> pool(4);
  6.   //Problem 92
  7.   for(pool[0]=0;pool[0]<10;pool[0]++)
  8.     for(pool[1]=pool[0]+1;pool[1]<10;pool[1]++)
  9.       for(pool[2]=pool[1]+1;pool[2]<10;pool[2]++)
  10.         for(pool[3]=pool[2]+1;pool[3]<10;pool[3]++){
  11. //          if(pool[0]==1 && pool[1]==2 && pool[2]==5 && pool[3]==8){
  12. //            cout << pool[0]<<pool[1]<<pool[2]<<pool[3]<<endl;
  13.             vector<bool> possible(10000,false);
  14.             for(int a=0;a<4;a++){
  15.               double n = pool[a];
  16.               for(int b=0;b<4;b++){
  17.                 if(b!=a){
  18.                   for(int e = 0;e<5;e++){
  19.                     double ne=n;
  20.                     if(e==0){
  21.                       n+=pool[b];
  22.                     }
  23.                     else if(e==1){
  24.                       n=abs(n-pool[b]);
  25.                     }
  26.                     else if(e==2){
  27.                       n*=pool[b];
  28.                     }
  29.                     else if(e==3 && pool[b]!=0){
  30.                       n /= pool[b];
  31.                     }
  32.                     else if(e==4 && n!=0){
  33.                       n=pool[b]/n;
  34.                     }else
  35.                       continue;
  36.                     for(int c=0;c<4;c++){
  37.                       if(c!=a && c!=b){
  38.                         for(int f = 0;f<5;f++){
  39.                           double nf=n;
  40.                           if(f==0){
  41.                             n+=pool[c];
  42.                           }
  43.                           else if(f==1){
  44.                             n=abs(n-pool[c]);
  45.                           }
  46.                           else if(f==2){
  47.                             n*=pool[c];
  48.                           }
  49.                           else if(f==3 && pool[c]!=0){
  50.                             n /= pool[c];
  51.                           }
  52.                           else if(f==4 && n!=0){
  53.                             n=pool[c]/n;
  54.                           }else
  55.                             continue;
  56.                           for(int d=0;d<4;d++){
  57.                             if(d!=a && d!=b && d!=c){
  58.                               for(int g = 0;g<5;g++){
  59.                                 double ng=n;
  60.                                 if(g==0){
  61.                                   n+=pool[d];
  62.                                 }
  63.                                 else if(g==1){
  64.                                   n=abs(n-pool[d]);
  65.                                 }
  66.                                 else if(g==2){
  67.                                   n*=pool[d];
  68.                                 }
  69.                                 else if(g==3 && pool[d]!=0){
  70.                                   n /=pool[d];
  71.                                 }
  72.                                 else if(g==4 && n!=0){
  73.                                   n=pool[d]/n;
  74.                                 }else
  75.                                   continue;
  76.                                 if((int)n==n){
  77.                                   possible[(int)n]=true;
  78. //                                  if(n<60)
  79. //                                    cout << n<<":"<<pool[a]<<oper[e]<<pool[b]<<oper[f]<<pool[c]<<oper[g]<<pool[d]<<endl;
  80.                                 }
  81.                                 n=ng;
  82.                               }
  83.  
  84.                             }
  85.                           }
  86.                           n=nf;
  87.                         }
  88.  
  89.                       }
  90.                     }
  91.  
  92.  
  93.                     double cd;
  94.                     for(int c=0;c<4;c++){
  95.                       if(c!=a && c!=b){
  96.                         for(int d=0;d<4;d++){
  97.                           if(d!=a && d!=b && d!=c){
  98.                             for(int g = 0;g<5;g++){
  99.                               if(g==0){
  100.                                 cd=pool[c]+pool[d];
  101.                               }
  102.                               else if(g==1){
  103.                                 cd=abs(pool[d]-pool[c]);
  104.                               }
  105.                               else if(g==2){
  106.                                 cd=pool[c]*pool[d];
  107.                               }
  108.                               else if(g==3 && pool[c]!=0){
  109.                                 cd = pool[d] / (double)pool[c];
  110.                               }
  111.                               else if(g==4 && pool[d]!=0){
  112.                                 cd = pool[c] / (double)pool[d];
  113.                               }
  114.                               else
  115.                                 continue;
  116.  
  117.                               for(int f = 0;f<5;f++){
  118.                                 double ncd;
  119.                                 if(f==0){
  120.                                   ncd = n+cd;
  121.                                 }
  122.                                 else if(f==1){
  123.                                   ncd = abs(n-cd);
  124.                                 }
  125.                                 else if(f==2){
  126.                                   ncd = n*cd;
  127.                                 }
  128.                                 else if(f==3 && cd!=0){
  129.                                   ncd = n/cd;
  130.                                 }
  131.                                 else if(f==4 && n!=0){
  132.                                   ncd = cd/n;
  133.                                 }
  134.                                 else
  135.                                   continue;
  136.                                 if((int)ncd==ncd){
  137.                                   possible[(int) ncd]=true;
  138. //                                  cout<<ncd<<':'<<pool[a]<<oper[e]<<pool[b]<<oper[f]<<'('<<pool[c]<<oper[g]<<pool[d]<<')'<<endl;
  139.                                 }
  140.                               }
  141.                             }
  142.                           }
  143.                         }
  144.                       }
  145.                     }
  146.                     n=ne;
  147.                   }
  148.                 }
  149.               }
  150.             }
  151.             int i = 1;
  152.             while(possible[i])
  153.               i++;
  154.             if(i>maxi){
  155.               best=pool;
  156.               maxi=i;
  157.             }
  158. //          }
  159.         }
  160.  
  161.   for(int i=0;i<4;i++){
  162.     number+=best[i];
  163.     if(i!=3)
  164.       number*=10;
  165.   }
  166. finish:
  167.   cout << number<< " " << maxi <<  endl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement