今天看啥  ›  专栏  ›  陈策

求助贴 24点程序

陈策  · 简书  ·  · 2018-07-14 10:44

请给我一个代码,
1 随机选四个数字(1~13之间)。
2 加个按钮,如果可以算24,就写出所有方法,,反之则画 “×”。
3 要支持阶乘,如(1+1+1+1)!,[(3-2)×1]!
5 尽量不要bug
6 可以刷新,点击一下换一道题。
谢谢各位大神的帮助。
-------分割线-------

百度上的,我试过了,不咋地,没测试过。供参考。

-------分割线-------

#include<stdio.h> 

double fun(double a1,double a2,int b) //加减乘除的函数

{switch(b) 

{case 0:return (a1+a2); 

case 1:return (a1-a2); 

case 2:return (a1*a2); 

case 3:return (a1/a2); 

} 

} 

void main() 

{int i,j,k,l,n,m,r,save[4],flg=1; 

double num[4]={1,1,1,1},tem1,tem2,tem3,abc=1111; 

char sign[5]="+-*/"; 

printf("输入四个数:"); 

for(i=0;i<4;i++) //判断四个数是否满足24点运算

{scanf("%lf",num+i); save[i]=num[i];if(save[i]>13)flg=0;}

if(flg) {

flg=0;

for(i=0;i<4;i++) 

for(j=0;j<4;j++) 

if(j!=i) 

{for(k=0;k<4;k++) 

if(k!=i&&k!=j) 

{for(l=0;l<4;l++) 

if(l!=i&&l!=j&&l!=k) 

{for(n=0;n<4;n++) 

for(m=0;m<4;m++) 

for(r=0;r<4;r++) 

{tem1=fun(num[i],num[j],n); 

tem2=fun(tem1,num[k],m); 

tem3=fun(tem2,num[l],r); 

if(tem3==24.0) {printf("{(%d%c%d)%c%d}%c%d=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);return;}

else if(tem3==-24.0) {printf("{%d%c(%d%c%d)}%c%d=24\n",save[k],sign[m],save[i],sign[n],save[j],sign[r],save[l]);return;}

else if(tem3==1.0/24.0) {printf("%d%c{(%d%c%d)%c%d}=24\n",save[l],sign[r],save[i],sign[n],save[j],sign[m],save[k]);return;}

else if(tem3==-1.0/24.0) {printf("%d%c{%d%c(%d%c%d)}=24\n",save[l],sign[r],save[k],sign[n],save[i],sign[m],save[j]);return;}

else 

{tem1=fun(num[i],num[j],n); 

tem2=fun(num[k],num[l],r); 

tem3=fun(tem1,tem2,m); 

if(tem3==24.0) {printf("(%d%c%d)%c(%d%c%d)=24\n",save[i],sign[n],save[j],sign[m],save[k],sign[r],save[l]);return;}

} 

} 

} 

} 

}

}

if(!flg) printf("

NO

ANSWER\n"); 

}

来自百度知道

------分割线------

#include
#include

int treat(float a,float b,float c,float d);
float myF(int flag,float m,float n);
void myPrint(int type,int i,int j,int k,float a,float b,float c,float d);

int time,temp=0;
void main()
{
 int i,j,k,t,again,res,flag;
 float num[4];
 again=1;
 while(again==1)
 {
  printf ("\nPlease Enter 4 nums(1~13):\n");
  i=0;
  flag=0;
  while (flag==0)
  {
   i++;
  // printf ("Input num-%d\n",i);
   for(i=0;i<4;i++)
   {
    scanf("%f",&num[i]);
    if (num[i]<1 || num[i]>13 || num[i]!=int(num[i]))
     flag++;
   }
   if(flag!=0)
   {
    printf ("Error input again\n",i);
    flag=0;
   }
   else
    flag=1;
  }
  for (i=0;i<4;i++)
   for (j=0;j<4;j++)
    if (j!=i)
     for (k=0;k<4;k++)
      if (k!=j && k!=i)
       for (t=0;t<4;t++)
        if (t!=i && t!=j && t!=k)
        {
         res=treat(num[i],num[j],num[k],num[t]);
        }
 if (res==0)
  printf ("\nNo answer\n");
 else ;
 // printf ("time=%d\n\n",time);
 printf ("\n1: Go on\n2: Quit\n");
 scanf ("%d",&again);
 }
}

int treat(float a,float b,float c,float d)
{
 int i,j,k;
 float sum1,sum2,sum3;
 for (i=0;i<4;i++)
  for (j=0;j<6;j++)
   for (k=0;k<6;k++)
   {
    if ((!(i==3 && b==0)) && (!(j==3 && c==0)) && (!(k==3 && d==0)))
    {
     sum1=myF(i,a,b);
     sum2=myF(j,sum1,c);
     sum3=myF(k,sum2,d);
     if (fabs(sum3-24)<0.1)
     {
      temp++;
      myPrint(1,i,j,k,a,b,c,d);
     // printf ("sum1:myF(%d,%2.0f,%2.0f)  sum1=%f\n",i,a,b,sum1);
     // printf ("sum2:myF(%d,%2.0f,%2.0f)  sum2=%f\n",j,c,d,sum2);
     // printf ("1:myF(%d,myF(%d,myF(%d,%2.0f,%2.0f),%2.0f),%2.0f)   sum3=%f\n\n",k,j,i,a,b,c,d,sum3);
     }
    }
    if (k==2)
    {
     sum1=myF(i,a,b);
     sum2=myF(j,c,d);
     sum3=sum1*sum2;
      if (fabs(sum3-24)<0.1)
     {
      temp++;
      myPrint(2,i,j,k,a,b,c,d);

-------分割线-------
这是在SOGO搜狗问问(https://wenwen.sogou.com/z/q783822636.htm)找到的,现在网上的都不能随机出数字,我要的阶乘也不行.
各位大神码农,THX,Thanks(・ω・)ノ.

-------分割线-------
冷笑话一则
老师:0000怎么算24点?
同学:... ...
老师:很简单啊,再想一想?加油
同学:... ...
老师: 00:00 呀,就是凌晨24点,正好符合24点这个题目.
同学:... ...
有点冷,哈哈哈哈哈哈哈... ...

-------分割线-------

24点简介,摘自百科
棋牌类益智游戏,要求四个数字运算结果等于二十四,一起来玩玩吧!这个游戏用扑克牌更容易来开展。拿一副牌,抽去大小王后(初练也可以把J/Q/K也拿去),剩下1~10这40张牌(以下用1代替A)。任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号,高级玩家也可用乘方开方运算)把牌面上的数算成24。每张牌必须且只能用一次。如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3=24。

-------分割线-------

各位吃瓜的朋友们,再见. Good bye.




原文地址:访问原文地址
快照地址: 访问文章快照