zoukankan      html  css  js  c++  java
  • 24点游戏算法

    1. #include <stdio.h>  
    2. #include <string.h>  
    3. #include <math.h>  
    4.   
    5. #define LING    1E-6  
    6. #define CONT    4  
    7. #define VOLUE   24  
    8.   
    9. float number[CONT];       
    10. char expression[CONT][20] ;               
    11. bool m_judge = false;                           //判断是否有解。  
    12. int count = 0;  
    13.   
    14. void Find(int n)  
    15. {  
    16.     int i = 0, j = 0;  
    17.   
    18.     if (n == 1)  
    19.     {  
    20.         if ( fabs(number[0] - 24) <= LING)  
    21.         {  
    22.             for (i = 0; i < 20; i++)   
    23.             {  
    24.                 printf("%c", expression[0][i]) ;  
    25.             }  
    26.             printf("\t\t") ;  
    27.             m_judge = true;  
    28.             count ++;  
    29.             if((count % 2)==0)              //使输出时每行三个表达式  
    30.                 printf("\n") ;  
    31.         }  
    32.         else  
    33.         { }  
    34.     }  
    35.     for(i = 0; i < n; i++)               //查找  
    36.     {  
    37.         for (j = i + 1; j < n; j++)      //与其后面的查找进行计算  
    38.         {  
    39.             float a, b;   
    40.             char expressiona[20], expressionb[20];  
    41.                   
    42.             a = number[i] ;  
    43.             b = number[j] ;  
    44.             number[j] = number[n - 1];  
    45.   
    46.             strcpy(expressiona, expression[i]) ;  
    47.             strcpy(expressionb, expression[j]) ;  
    48.             strcpy(expression[j], expression[n - 1]) ;  
    49.               
    50.             sprintf(expression[i], "(%s+%s)", expressiona, expressionb) ;  
    51.             number[i] = a + b;  
    52.             Find(n-1);  
    53.           
    54.             ///////////////////////////////////   
    55.             sprintf(expression[i], "(%s-%s)", expressiona, expressionb) ;  
    56.             number[i] = a - b;  
    57.             Find(n-1);  
    58.               
    59.             sprintf(expression[i], "(%s-%s)", expressionb, expressiona) ;  
    60.             number[i] = b - a;  
    61.             Find(n-1);  
    62.               
    63.             sprintf(expression[i], "(%s*%s)", expressiona, expressionb) ;  
    64.             number[i] = a * b;  
    65.             Find(n-1);  
    66.               
    67.             if (b != 0)  
    68.             {  
    69.                 sprintf(expression[i], "(%s/%s)", expressiona, expressionb) ;  
    70.                 number[i] = a / b;  
    71.                 Find(n-1);  
    72.             }  
    73.             if (a != 0)  
    74.             {  
    75.                 sprintf(expression[i], "(%s/%s)", expressionb, expressiona) ;  
    76.                 number[i] = b / a;  
    77.                 Find(n-1);  
    78.             }  
    79.             number[i] = a;                          // 最后一层的Find(2)调用完成后将a重新赋值给number[i]即number[0]  
    80.             number[j] = b;                          // 最后一层的Find(2)调用完成后将b重新赋值给nubmer[j]即number[1]  
    81.             strcpy(expression[i], expressiona) ;  
    82.             strcpy(expression[j], expressionb) ;  
    83.         }  
    84.     }  
    85. }  
    86. int main()  
    87. {  
    88.     int i, j ;  
    89.     printf("请输入四个数:\n") ;  
    90.     for (i = 0; i < CONT; i++)  
    91.     {  
    92.         char ch[20], s;  
    93.         int a ;  
    94.         printf("第%d个数:", i+1) ;  
    95.         scanf("%f", &number[i]) ;  
    96.         a = (int)number[i] ;  
    97.         s = char(a + 48);  
    98.         ch[0] = s ;  
    99.         for (j = 1; j < 20; j++)   
    100.         {  
    101.             ch[j] = 0 ;  
    102.         }  
    103.         strcpy(expression[i], ch) ;  
    104.     }  
    105.       
    106.     printf("\n") ;  
    107.     Find(CONT) ;  
    108.     if(m_judge==true)  
    109.     {  
    110.         printf("\n\n成功!\n") ;  
    111.         printf("总共的计算方法共有:%d\n", count) ;  
    112.     }  
    113.     else  
    114.     {  
    115.         printf("失败!") ;  
    116.     }  
    117.     return 0;  
    118. }
  • 相关阅读:
    分布式事务
    K8s应用案例介绍——阿里云
    数据库索引的底层原理——b树
    Understanding the GitHub flow
    Code Review
    详解微服务架构
    yarn之package.json
    yarn.lock文件
    Git Api——git开发
    Unit Test —— xUnit.net
  • 原文地址:https://www.cnblogs.com/fangyan5218/p/10618270.html
Copyright © 2011-2022 走看看