24点游戏

来源:互联网 发布:java 常用算法函数 编辑:程序博客网 时间:2024/06/07 09:09

算法分析

1.      利用随机函数rand()生成1-13的四位随机整数。

2.      定义calc_sign()函数,用来进行运算符的表示。

3.      遍历所有运算结果。

#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <time.h>int calc_sign(int a1, int a2, int b){    switch (b) {        default:        case 0: return (a1+a2);         case 1: return (a1-a2);         case 2: return (a1*a2);         case 3: if (a2!=0) return (a1/a2); else return 0;     } } #define MAX 10 void calc_24point() {    int num[4];   char sign[5]="+-*/";    int i,j,k,l;    int n,m,r;    int tem1,tem2,tem3;    srand( (unsigned)time(0));    num[0] = 1+rand()%13;    num[1] = 1+rand()%13;    num[2] = 1+rand()%13;    num[3] = 1+rand()%13;    for(i=0;i<4;i++){      for(j=0;j<4;j++)   {          if(j==i)  continue;      for(k=0;k<4;k++)  {         if(k==i || k==j)     continue;      for(l=0;l<4;l++)   {          if(l==i || l==j  || l==k)  continue;      for(n=0;n<4;n++)  {      for(m=0;m<4;m++)  {      for(r=0;r<4;r++)   {            tem1=calc_sign(num[i],num[j],n);             tem2=calc_sign(tem1,num[k],m);             tem3=calc_sign(tem2,num[l],r);             if(tem3==24)     printf("{(%d%c%d)%c%d}%c%d=24\n",num[i],sign[n],num[j],sign[m],num[k],sign[r],num[l]);            else if(tem3==-24)    printf("{%d%c(%d%c%d)}%c%d=24\n",num[k],sign[m],num[i],sign[n],num[j],sign[r],num[l]);            else {   tem1=calc_sign(num[i],num[j],n);               tem2=calc_sign(num[k],num[l],r);               tem3=calc_sign(tem1,tem2,m);            if(tem3==24.0)    printf("(%d%c%d)%c(%d%c%d)=24\n",num[i],sign[n],num[j],sign[m],num[k],sign[r],num[l]);}       }       }       }       }       }       }    }} int main() {    while(1){        calc_24point();printf("0键返回,任意键继续\n");        if(getchar() != '0') continue;        else break;    }return 0;} 

4.      若输出结果为24则printf表达式。

5.      任意键返回步骤1,继续操作,遇0则退出。

6.      程序流程图:

0 0