24 点游戏

来源:互联网 发布:stc89c51单片机烧录 编辑:程序博客网 时间:2024/06/05 16:03
//*********24点纸牌游戏***********//版本:v1.0//创建时间:2017年4月1日//主要功能:系统随机生成1~13的4张牌(1用A代替,11用J代替,12用Q代替,13用K代替),要求将四张牌用加减乘除混合运算求得出24//主要原理:系统通过对随机生成的四张扑克牌进行运算,如果结果为24,则输出结果及结果个数//************************************#include <stdio.h>  #include <stdlib.h>  #include <math.h>  #include <time.h>  int main()   {        int p[4],c;        void Random(int p[4]);//函数声明     void printResult(int p[4]);//函数声明     printf("--------------------------------------------\n*******24点纸牌游戏******\n");       printf("0代表扑克牌中的10\n");     printf("--------------------------------------------\n");     do       {           printf("随机生成的纸牌为:\n");          Random(p);//函数调用         printf("\n");         printResult(p);//函数调用          printf("1.继续游戏 2.结束\n");         scanf("%d",&c);             }while(c==1);              return 0;   }  ////利用系统时间作为种子生成四个随机数并输出void Random(int p[4])   {       int i;       char Card(int x);    srand((unsigned)time(NULL));      for(i=0;i<4;i++)      {          p[i]=rand()%13+1;               printf("%c ",Card(p[i]));      }   }   //如果随机出现的数字为1,则输出A;同样,输出为J,Q,K;   char Card(int x)   {       if(x==1)       {           return 'A';       }      else if(x<10)      {          return x+'0';      }     else if(x==10)      {          return '0';      }    else if(x==11)      {          return 'J';      }      else if(x==12)      {          return 'Q';      }      else if(x==13)      {          return 'K';      }   }   //加减乘除四种运算符的运算    double ys(double num1,double num2,char o)   {       double result;        switch(o)       {           case '+':           result=num1+num2;           break;          case '-':           result=fabs(num1-num2);           break;          case '*':           result=num1*num2;           break;          case '/':         result=num1/num2;           break;          default :              break;       }            return result;   }  //穷举运算次序   int Result(int p[4],char o[3])   {       double t;       int a=p[0];       int b=p[1];       int c=p[2];       int d=p[3];            //1.((A*B)*C)*D      t=0;      t=ys(ys(ys(a,b,o[0]),c,o[1]),d,o[2]);           if(fabs(t-24)==0)  //如果计算结果的绝对值与24相等,输出结果    {         printf("((%c%c%c)%c%c)%c%c\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3]));           return 1;      }            //2.(A*(B*C))*D      t=0;      t=ys(ys(a,ys(b,c,o[1]),o[0]),d,o[2]);          if(fabs(t-24)==0)   //如果计算结果的绝对值与24相等,输出结果    {         printf("(%c%c(%c%c%c))%c%c\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3]));         return 1;      }      //3.(A*B)*(C*D)      t=0;      t=ys(ys(a,b,o[0]),ys(c,d,o[2]),o[1]);           if(fabs(t-24)==0)   //如果计算结果的绝对值与24相等,输出结果    {          printf("(%c%c%c)%c(%c%c%c)\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3]));         return 1;      }            //4.A*(B*(C*D))      t=0;      t=ys(a,ys(b,ys(c,d,o[2]),o[1]),o[0]);              if(fabs(t-24)==0)   //如果计算结果的绝对值与24相等,输出结果    {         printf("%c%c(%c%c(%c%c%c))\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3]));        return 1;      }      //5.A*((B*C)*D)       t=0;       t=ys(a,ys(ys(b,c,o[1]),d,o[2]),o[0]);            if(fabs(t-24)==0)   //如果计算结果的绝对值与24相等,输出结果    {           printf("%c%c((%c%c%c)%c%c)\n",Card(p[0]),o[0],Card(p[1]),o[1],Card(p[2]),o[2],Card(p[3]));          return 1;      }            return 0;   }   //输出可以用几种方法解出答案 void printResult(int p[4])   {       char O[4]={'+','-','*','/'};       char o[3];       int i,j,k;       int count=0;             for(i=0;i<4;i++)//三层for循环列出了所有运算符可能出现的情况     {        for(j=0;j<4;j++)         {           for(k=0;k<4;k++)             {               o[0]=O[i];               o[1]=O[j];               o[2]=O[k];               if(Result(p,o)==1)                  count++;           }        }     }      printf("共%d种方法\n",count);      } 

程序运行结果截屏

这里写图片描述

总结及心得体会:
通过一次一次上机自己动手写程序,使我更加扎实的掌握了知识,在写程序过程中虽然遇到了一些问题,但经过一次又一次的思考、查阅、讨论,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我知识欠缺和经验不足。实践 出真知,通过亲自动手上机,使我掌握的知识不再是纸上谈兵。我相信在这学期的一次次编写程序的过程中,不仅会培养我独立思考、动手操作的能力,在各种其它能力上也都会有提高。更重要的是,在编写代码时,我学会了很多学习的方法,而这是日后最实用的。

0 0
原创粉丝点击