zoukankan      html  css  js  c++  java
  • 24点求解

    搜索24点的组合方案:
    (2*(2+2))*3=24
    (2+2)*(2+4)=24
    2*(2+(2*5))=24
    2*((2+2)+8)=24
    2+(2*(2+9))=24
    2+(2+(2*10))=24
    (2+2)*(3+3)=24
    2*((2*3)+6)=24
    2*((2+3)+7)=24
    2+(2*(3+8))=24
    ((2+2)+4)*3=24
    2*((2*4)+4)=24
    2+(2+(4*5))=24
    2*((2+4)+6)=24
    2+(2*(4+7))=24
    (2*(2*4))+8=24
    2*((2+5)+5)=24
    2+(2*(5+6))=24
    (2*(2+5))+10=24
    (2*(2+6))+8=24
    (2+(2*6))+10=24
    2*((2*7)-2)=24
    (2*(2+7))+6=24
    (2+(2*7))+8=24
    (2*(2*8))-8=24
    (2+2)*(9-3)=24
    (2+(2*9))+4=24
    2*((2*9)-6)=24
    (2+2)*(10-4)=24
    2*((2*10)-8)=24
    (2+(2+10))+10=24
    ((2+3)+3)*3=24
    2*((3+3)+6)=24
    ((2*3)-3)*8=24
    ((2+3)*3)+9=24
    ((2+3)*4)+4=24
    2*((3+4)+5)=24
    (2+(3*4))+10=24
    2*((3*5)-3)=24
    (2*(3*5))-6=24
    (2+(3*5))+7=24
    (2*(3+5))+8=24
    (2+(3*6))+4=24
    (2*(3+6))+6=24
    2*(3*(7-3))=24
    (2*(3+7))+4=24
    2*((3*7)-9)=24
    2*(3*(8-4))=24
    (2*3)+(8+10)=24
    (2+(3*9))-5=24
    (2*3)+(9+9)=24
    (2+(3+9))+10=24
    (2*(3+10))-2=24
    2*(3*(10-6))=24
    2*((4+4)+4)=24
    (2+(4*4))+6=24
    (2*(4+4))+8=24
    (2*(4+5))+6=24
    2*((4*5)-8)=24
    (2*4)+(6+10)=24
    2*(4*(7-4))=24
    (2+(4*7))-6=24
    (2*4)+(7+9)=24
    (2*4)+(8+8)=24
    (2+(4+8))+10=24
    ((2*4)*9)/3=24
    (2+4)*(9-5)=24
    2*(4*(9-6))=24
    (2+(4+9))+9=24
    (2*(4+10))-4=24
    2*(4*(10-7))=24
    ((2*5)-2)*3=24
    (2*5)+(2*7)=24
    2*((5-2)+9)=24
    2*((5-3)+10)=24
    ((2*5)-4)*4=24
    (2*5)+(4+10)=24
    (2+(5*5))-3=24
    (2*(5+5))+4=24
    (2+(5/5))*8=24
    (2*5)+(5+9)=24
    ((2*5)-6)*6=24
    (2*5)+(6+8)=24
    (2*5)+(7+7)=24
    ((2*5)-7)*8=24
    (2+(5+7))+10=24
    (2*(5+8))-2=24
    (2+(5+8))+9=24
    (2*(5+10))-6=24
    (2*6)+(2*6)=24
    (2*6)+(3+9)=24
    ((2+6)-4)*6=24
    (2*6)+(4+8)=24
    (2*6)+(5+7)=24
    (2*6)+(6+6)=24
    (2+(6/6))*8=24
    (2+(6+6))+10=24
    (2+(6+7))+9=24
    (2+(6+8))+8=24
    (2*(6+9))-6=24
    ((2*6)-9)*8=24
    (2+6)*(10-7)=24
    (2*(6+10))-8=24
    2*((7-2)+7)=24
    (2*7)+(3+7)=24
    2*((7-3)+8)=24
    (2*7)+(5+5)=24
    ((2*7)-6)*3=24
    ((2+7)-6)*8=24
    (2*(7+7))-4=24
    (2+(7+7))+8=24
    ((2*7)-8)*4=24
    (2*(7+9))-8=24
    2*(7+(10/2))=24
    (2+(7*10))/3=24
    (2*(7+10))-10=24
    ((2+8)*3)-6=24
    ((2+8)-7)*8=24
    ((2*8)-8)*3=24
    (2*(8+8))-8=24
    (2*(8+9))-10=24
    ((2*9)-2)+8=24
    (2*(9-2))+10=24
    ((2*9)-4)+10=24
    2*((9-6)+9)=24
    2*((9-7)+10)=24
    ((2+9)-8)*8=24
    (2+(9/9))*8=24
    (2*(10-3))+10=24
    ((2*10)-5)+9=24
    2*((10/5)+10)=24
    ((2*10)-6)+10=24
    2*((10-8)+10)=24
    (3*(3*3))-3=24
    3+(3*(3+4))=24
    (3*3)+(3*5)=24
    (3*(3+3))+6=24
    3*((3/3)+7)=24
    ((3+3)-3)*8=24
    3*((3*4)-4)=24
    (3/3)*(4*6)=24
    (3+(3*4))+9=24
    ((3/3)+5)*4=24
    (3+(3*5))+6=24
    3*((3*5)-7)=24
    (3*3)+(5+10)=24
    ((3*3)-6)*8=24
    (3*3)+(6+9)=24
    3*((3*6)-10)=24
    (3*(3+7))-6=24
    (3*3)+(7+8)=24
    (3+3)*(8-4)=24
    (3*(3+8))-9=24
    (3+(3+8))+10=24
    (3+3)*(9-5)=24
    (3+(3+9))+9=24
    3*(3+(10/2))=24
    3+(3*(10-3))=24
    (3+(3*10))-9=24
    3*((4-3)+7)=24
    ((3+4)*4)-4=24
    (3+(4*4))+5=24
    (3+(4/4))*6=24
    3*((4/4)+7)=24
    (3*4)+(4+8)=24
    (3*4)+(5+7)=24
    (3*4)+(6+6)=24
    (3+(4*7))-7=24
    (3*(4+7))-9=24
    (3+(4+7))+10=24
    3*(4*(8-6))=24
    (3+(4+8))+9=24
    3*((4+9)-5)=24
    ((3*4)*10)/5=24
    3*((4+10)-6)=24
    3*(4*(10-8))=24
    (3*5)+(4+5)=24
    ((3+5)-4)*6=24
    ((3+5)*4)-8=24
    (3*(5+5))-6=24
    3*((5/5)+7)=24
    ((3+5)-5)*8=24
    (3+(5*6))-9=24
    (3+(5+6))+10=24
    (3+(5+7))+9=24
    (3+(5+8))+8=24
    3*((5+10)-7)=24
    3*((6/3)+6)=24
    ((3+6)-5)*6=24
    3*((6-5)+7)=24
    (3*(6-5))*8=24
    (3+(6/6))*6=24
    3*((6/6)+7)=24
    ((3+6)-6)*8=24
    (3+(6+6))+9=24
    (3+(6+7))+8=24
    3*((6+9)-7)=24
    3*((6+10)-8)=24
    ((3*7)-5)+8=24
    3*((7-6)+7)=24
    (3+(7+7))+7=24
    ((3+7)-7)*8=24
    ((3*7)-7)+10=24
    3*(7+(8/8))=24
    3+((7*9)/3)=24
    3*((7+9)-8)=24
    3*(7+(9/9))=24
    3*((7+10)-9)=24
    3*(7+(10/10))=24
    (3+(8/8))*6=24
    ((3*8)+8)-8=24
    3*(8*(9-8))=24
    ((3*8)+9)-9=24
    3*(8*(10-9))=24
    ((3*8)+10)-10=24
    3*(9-(3/3))=24
    3*(9-(4/4))=24
    (3*(9-4))+9=24
    3*(9-(5/5))=24
    ((3*9)+5)-8=24
    (3+9)*(6-4)=24
    ((3*9)+6)-9=24
    3*(9-(7/7))=24
    (3+9)*(8-6)=24
    3*(9-(9/9))=24
    3*((9+9)-10)=24
    ((3+9)*10)/5=24
    3*(9-(10/10))=24
    ((3*10)+4)-10=24
    ((3+10)-9)*6=24
    3*(10-(10/5))=24
    (3+(10/10))*6=24
    (4-2)*(5+7)=24
    (4+(4*4))+4=24
    4*((4/4)+5)=24
    ((4+4)-4)*6=24
    (4*(4+4))-8=24
    4*((4*4)-10)=24
    ((4+4)-5)*8=24
    (4+(4+6))+10=24
    (4+4)*(7-4)=24
    4*((4+7)-5)=24
    (4+(4*7))-8=24
    (4+(4+7))+9=24
    4*((4+8)-6)=24
    (4+(4+8))+8=24
    4+(4*(9-4))=24
    (4+4)*(9-6)=24
    4+(4*(10-5))=24
    (4+4)*(10-7)=24
    4*((4+10)-8)=24
    4*((5-4)+5)=24
    (4*(5-4))*6=24
    4*((5/5)+5)=24
    ((4+5)-5)*6=24
    (4-(5/5))*8=24
    ((4*5)-5)+9=24
    (4+(5+5))+10=24
    4*(5+(6/6))=24
    ((4+5)-6)*8=24
    (4+(5+6))+9=24
    (4+(5*6))-10=24
    4*((5+7)-6)=24
    4*(5+(7/7))=24
    (4+(5+7))+8=24
    4*(5+(8/8))=24
    4*((5+9)-8)=24
    4*(5+(9/9))=24
    4*((5+10)-9)=24
    4*(5+(10/10))=24
    ((4*6)+6)-6=24
    (4+(6+6))+8=24
    4*(6*(7-6))=24
    (4+(6+7))+7=24
    ((4+6)-7)*8=24
    ((4*6)+8)-8=24
    4*(6*(9-8))=24
    ((4*6)+9)-9=24
    4*(6*(10-9))=24
    ((4*6)+10)-10=24
    (4*(7-3))+8=24
    4*(7-(5/5))=24
    ((4*7)+5)-9=24
    4+((7-5)*10)=24
    ((4*7)+6)-10=24
    4*(7-(7/7))=24
    4*((7+7)-8)=24
    ((4+7)-8)*8=24
    4*((7+8)-9)=24
    4*(7-(9/9))=24
    4*((7+9)-10)=24
    4*(7-(10/10))=24
    4+((8-6)*10)=24
    (4-(8/8))*8=24
    4*((8+8)-10)=24
    ((4+8)-9)*8=24
    ((4+8)*10)/5=24
    (4*(9-2))-4=24
    (4*9)-(4+8)=24
    (4*9)-(6+6)=24
    (4-(9/9))*8=24
    ((4+9)-10)*8=24
    (4*(10-3))-4=24
    4+((10-8)*10)=24
    (5*5)-(3/3)=24
    (5*5)-(5/5)=24
    ((5*5)+5)-6=24
    (5+(5+5))+9=24
    ((5+5)-6)*6=24
    ((5*5)+6)-7=24
    (5+(5+6))+8=24
    (5+(5+7))+7=24
    ((5*5)+7)-8=24
    (5*5)-(8/8)=24
    ((5*5)+8)-9=24
    (5*5)-(9/9)=24
    ((5*5)+9)-10=24
    (5*5)-(10/10)=24
    (5*(6/2))+9=24
    (5-(6/6))*6=24
    (5+(6+6))+7=24
    ((5+6)-8)*8=24
    ((5*6)*8)/10=24
    (5*7)-(2+9)=24
    (5-(7/7))*6=24
    (5+7)*(8-6)=24
    (5+7)*(9-7)=24
    ((5+7)-9)*8=24
    ((5+7)*10)/5=24
    (5+7)*(10-8)=24
    (5*8)-(2*8)=24
    (5*8)-(8+8)=24
    ((5+8)-9)*6=24
    ((5+8)-10)*8=24
    (5*(9/3))+9=24
    (5*(9-6))+9=24
    ((5+9)-10)*6=24
    (5-(10/5))*8=24
    (5*(10-7))+9=24
    (5-(10/10))*6=24
    ((6/3)*7)+10=24
    ((6-3)*10)-6=24
    (6+(6+6))+6=24
    6*((6+6)-8)=24
    ((6*6)*6)/9=24
    (6+(6*7))/2=24
    6*((6+7)-9)=24
    6+(6*(8-5))=24
    6*((6+8)-10)=24
    ((6+6)-9)*8=24
    (6*(6+10))/4=24
    ((6+6)*10)/5=24
    6+(6*(10-7))=24
    6+((7-5)*9)=24
    6*((7+7)-10)=24
    (6*7)-(8+10)=24
    (6*(7+9))/4=24
    (6*7)-(9+9)=24
    (6/(8-6))*8=24
    6*(8/(9-7))=24
    6*(8/(10-8))=24
    (6*9)-(5*6)=24
    6*(9-(10/2))=24
    6+(9*(10-8))=24
    (6*10)-(6*6)=24
    ((6+10)*9)/6=24
    ((7-5)*7)+10=24
    ((7-5)*8)+8=24
    (7*(8/4))+10=24
    (7*(9-7))+10=24
    (7*(10/5))+10=24
    (7*(10-8))+10=24
    (8-2)+(8+10)=24
    (8/2)*(9-3)=24
    (8-5)*(10-2)=24
    ((8-6)*8)+8=24
    ((8+8)*9)/6=24
    8+(8*(9-7))=24
    8+(8*(10-8))=24
    8*(9-(2+4))=24
    (8*(9-5))-8=24
    8*(9/(9-6))=24
    8*(9/(10-7))=24
    (8*10)-(7*8)=24
    ((8*10)-8)/3=24
    (9-4)+(9+10)=24
    (9-5)+(10+10)=24
    9+((9*10)/6)=24
    (9+(10/2))+10=24
    (10-6)+(10+10)=24
    ((10-7)*10)-6=24
    ((10*10)-4)/4=24
    在109768种组合中找到392种方案。

    要求满足公式:a ? b? c ? d =24

    其中, abcd取自扑克2~10,?取自+-*/, 可随意添加括号改变运算顺序和结合方式。

    以上是我计算的结果,不知道对不对,百度不到答案。

    贴代码:

      1    static void 枚举24点计算游戏()
      2         {
      3             //a ? b ? c ? d = 24
      4             //a,b,c,d 取自扑克(1~13,每个数字有4个相同的牌)
      5             //? 取自+-*/
      6             //中间结果须为自然数。
      7             //结合方式:1,2,3
      8             //((a?b)?c)?d   1,2,3
      9             //(a?b)?(c?d)   1,3,2
     10             //(a?(b?c))?d   2,1,3
     11             //a?((b?c)?d)   2,3,1
     12             //(a?b)?(c?d)   3,1,2 == 1,3,2
     13             //a?(b?(c?d))   3,2,1
     14             Func<int,int,int>[] op = new Func<int,int,int>[4];
     15             op[0] = (x,y)=>x+y;
     16             op[1] = (x,y)=>x-y>0?x-y:-9999;
     17             op[2] = (x,y)=>x*y;
     18             op[3] = (x,y)=>y!=0&&x%y==0?x/y:-9999;
     19             string[] opString = new string[]{"+","-","*","/"};
     20             bool[] set = new bool[11 * 11 * 11 * 11];
     21             int count=0;
     22             int countN = 0;
     23             Console.WriteLine("搜索24点的组合方案:");
     24                     for(int a =2; a<11; a++)
     25                         for (int b = 2; b < 11; b++)
     26                             for (int c = 2; c < 11; c++)
     27                                                 
     28                              for (int d = 2; d < 11; d++)
     29                                {
     30                                next:
     31                                    if (d > 10) continue;
     32                                     for (int k = 0; k < 4; k++)
     33                                         for (int i = 0; i < 4; i++)
     34                                             for (int j = 0; j < 4; j++)
     35                                             {
     36                                                 countN++;
     37                                                 List<int> sor = new List<int>();
     38                                                 sor.Add(a);
     39                                                 sor.Add(b);
     40                                                 sor.Add(c);
     41                                                 sor.Add(d);
     42                                                 sor.Sort();
     43                                                 int magicNumber = sor[0] * 1000 + sor[1] * 100 + sor[2] * 10 + sor[3];
     44                                                 if (set[magicNumber])
     45                                                 {
     46                                                     d++;
     47                                                     goto next;
     48                                                 }
     49                                                 //(a?(b?c))?d   2,1,3
     50                                                 if (op[k](op[i](a, op[j](b, c)), d) == 24)
     51                                                 {
     52                                                     count++;
     53                                                     Console.WriteLine("({0}{1}({2}{3}{4})){5}{6}=24",
     54                                                         a, opString[i], b, opString[j], c, opString[k], d);
     55                                                     set[magicNumber] = true;
     56                                                     d++;
     57                                                     goto next;
     58                                                 }
     59                                                 //a?((b?c)?d)   2,3,1
     60                                                 if (op[i](a, op[k](op[j](b, c), d)) == 24)
     61                                                 {
     62                                                     count++;
     63                                                     Console.WriteLine("{0}{1}(({2}{3}{4}){5}{6})=24",
     64                                                         a, opString[i], b, opString[j], c, opString[k], d);
     65                                                     set[magicNumber] = true;
     66                                                     d++;
     67                                                     goto next;
     68                                                 }
     69                                                 //a?(b?(c?d))   3,2,1
     70                                                 if (op[i](a, op[j](b, op[k](c, d))) == 24)
     71                                                 {
     72                                                     count++;
     73                                                     Console.WriteLine("{0}{1}({2}{3}({4}{5}{6}))=24",
     74                                                         a, opString[i], b, opString[j], c, opString[k], d);
     75                                                     set[magicNumber] = true;
     76                                                     d++;
     77                                                     goto next;
     78                                                 }
     79                                                 //(a?b)?(c?d) 3,1,2 == 1,3,2
     80                                                 if (op[i](op[j](a, b), op[k](c, d)) == 24)
     81                                                 {
     82                                                     count++;
     83                                                     Console.WriteLine("({0}{1}{2}){3}({4}{5}{6})=24",
     84                                                         a, opString[j], b,
     85                                                         opString[i],
     86                                                         c, opString[k], d);
     87                                                     set[magicNumber] = true;
     88                                                     d++;
     89                                                     goto next;
     90                                                 }
     91                                                 //((a?b)?c)?d  1,2,3
     92                                                 if (op[i](op[k](op[j](a, b), c), d) == 24)
     93                                                 {
     94                                                     count++;
     95                                                     Console.WriteLine("(({0}{1}{2}){3}{4}){5}{6}=24",
     96                                                         a, opString[j], b,
     97                                                         opString[k],
     98                                                         c, opString[i], d);
     99                                                     set[magicNumber] = true;
    100                                                     d++;
    101                                                     goto next;
    102                                                 }
    103 
    104                                             }
    105                             }
    106             Console.WriteLine("在{0}种组合中找到{1}种方案。",countN, count);
    107         }

               

  • 相关阅读:
    【c/c++】#pragma的用法
    【c/c++】#pragma的用法
    【matlab】matlab中 mcc、mbuild和mex命令详解
    【codecs】数据流ES、PES、TS、PS简介
    【codecs】数据流ES、PES、TS、PS简介
    【SVAC】SVAC标准简介
    【python】Python实现SMTP发送邮件
    【c】#pragma once 与#ifndef的区别与作用
    【c】#pragma once 与#ifndef的区别与作用
    【Tools/PC】如何在一台电脑上实现双屏幕显示?
  • 原文地址:https://www.cnblogs.com/Nobel/p/3001725.html
Copyright © 2011-2022 走看看