24点游戏

算法分析

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值