一个算24的帮助程序,简称24点外挂。。
//版本: 1.0
//功能:输入任意四个数,输出怎样计算可以得到24
//说明:有点问题,比如输入6 6 6 6 后,没有去除重复的
#include <stdio.h>
int key;//一个全局变量,用来做标示符的
int main()
{int i1,i2,i3,i4,i5;
int a[4],b[4];
int n=0;//n是用来判断是否有解的标志
system("title 算24外挂程序1.0 作者:zynpc");
system("color f0");
printf("请输入4个数,空格间隔,回车结束:\n");
scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);//输入四个需要排列的数
system("cls");//清屏
for(i1=0;i1<4;i1++)//这一串是将四个数排列组合,并将其输入数组b
{ b[0]=a[i1];
for(i2=0;i2<4;i2++)
{if(i2!=i1)
{b[1]=a[i2];
for(i3=0;i3<4;i3++)
if(i3!=i1&&i3!=i2)
{b[2]=a[i3];
for(i4=0;i4<4;i4++)
if(i4!=i1&&i4!=i2&&i4!=i3) b[3]=a[i4];
n+=pb(b);
}
}
}
}
if(n==0) printf("无解");
system("pause");
return 0;
}
int pn(int x)//打印运算符号
{
switch(x)
{
case 1: printf("+");break;
case 2: printf("-");break;
case 3: printf("*");break;
case 4: printf("/");break;
}
return;
}
int fn(int x,int y,int z)//进行四则运算赋值,并且固定1为+ 2为- 3为* 4为/
{int l;
switch(x)
{
case 1: l=y+z;break;
case 2: l=y-z;break;
case 3: l=y*z;break;
case 4: if(y%z==0&&y>z) {l=y/z;break;}
else key=1;break; //除法是否有效的判断,并输出一个判断的标示
}
return l;
}
int pb(int x[4])
{
int a=x[0],b=x[1],c=x[2],d=x[3];
int s1,s2,s3,s4;
int i,j,k,n=0;
for(i=1;i<5;i++)
{key=0;
s1=fn(i,a,b);
if(key==1) continue;//标示符为1.说明除法有问题,所以直接进入下一个循环
else for(j=1;j<5;j++)
{
s2=fn(j,s1,c);
if(key==1) continue;
else for(k=1;k<5;k++)
{
s3=fn(k,s2,d);
if(key==1) continue;
else if(s3==24) {n++;printf("((%d",a);pn(i);printf("%d)",b);
pn(j);printf("%d)",c);pn(k);printf("%d",d);printf("==24\n");}
} //打印结果
}
}
return n;
}
|