代码如下:
#include<stdio.h>
# include <stdlib.h>
# include <time.h>
FILE * fp;
void main()
{
void play(); //声明函数
fp=fopen("Gamereport.txt","wb");
printf(" *** | 欢迎使用24点游戏! | ***\n\n");
play();
}
//定义play()函数
void play()
{
int k,i,j,x=0,y=0,s[3],m,n,c,q,f=0,e,p[4],l;//p[4]数组存放输出时的四个运算数,
//s[3]分别存放运算结果
int a[4],newp[4],b[4]={1,2,3,4};//a[4]数组存放输入的四个数
char p1[3],sign; //定义存储运算符的字符数组
printf(" 请输入四个数:");
for(i=0;i<4;i++)
{
scanf("%d",&a[i]); //输入4个数
}
printf("\n");
for(l=0;l<sizeof(a)/sizeof(a[0]);l++){
if(a[i]<=0||a[i]>=13){
printf("输入有误,请输入4个0-13内的数字!");
break;
}
else{
for(i=0;i<3;i++)
{
k=i+1;
for(n=1;n<=(3-i)*4;n++)
{
if(((n-1)%4)==0&&n!=1)
k++;
switch(b[x]) //两个数进行运算
{
case 1:s[0]=a[i]+a[k];sign='+';break;
case 2:s[0]=a[i]-a[k];sign='-';break;
case 3:s[0]=a[i]*a[k];sign='*';break;
case 4:s[0]=a[i]/a[k];sign='/';break;
}
if((x=n%4)==0&&a[i]%a[k]!=0&&a[k]%a[i]!=0||a[k]==0||a[i]==0) //当除数是0时退出
continue;
if(n%4==0&&a[k]%a[i]==0)
{
p[0]=a[k];p1[0]=sign;p[1]=a[i];
} //满足条件就交换顺序
else
{
p[0]=a[i];p1[0]=sign;p[1]=a[k];}
for(e=0;e<4;e++) //找出其余两个数
{
if(e!=i&&e!=k)
{
f++;
newp[f]=a[e];
}
}
newp[0]=s[0];
newp[3]=newp[1]; //存放第一次两个数的运算和与剩下两个数
for(j=0;j<2;j++)
{
q=j+1;
for(m=1;m<=(2-j)*4;m++)
{
if(((m-1)%4)==0&&m!=1)
q++;
switch(b[y])
{
case 1:s[1]=newp[j]+newp[q];sign='+';break;
case 2:s[1]=newp[j]-newp[q];sign='-';break;
case 3:s[1]=newp[j]*newp[q];sign='*';break;
case 4:s[1]=newp[j]/newp[q];sign='/';break;
}
if((y=m%4)==0&&newp[j]%newp[q]!=0&&newp[q]%newp[j]!=0||newp[j]==0||newp[q]==0)
continue;
else
if(m%4==0&&newp[q]%newp[j]==0)
s[1]=newp[q]/newp[j];
if(j==0)
{
p1[1]=sign;
p[2]=newp[q];
for(c=0;c<4;c++)
{
switch(b[c])
{
case 1:s[2]=s[1]+newp[q+1];sign='+';break;
case 2:s[2]=s[1]-newp[q+1];sign='-';break;
case 3:s[2]=s[1]*newp[q+1];sign='*';break;
case 4:s[2]=s[1]/newp[q+1];sign='/';break;
}
if(c==3&&s[1]%newp[q+1]!=0&&newp[q+1]%s[1]!=0||newp[q+1]==0||s[1]==0)
continue;
else
if(c==3&&newp[q+1]%s[1]==0)
s[2]=newp[q+1]/s[1];
if(s[2]==24)
{
p1[2]=sign;
p[3]=newp[q+1];
if((m%4)==0&&newp[q]%newp[j]==0&&c==3&&newp[q+1]%s[1]==0) //控制输出顺序和运算优先级
printf("(%d%c(%d%c(%d%c%d)))=%d\n",p[3],p1[2],p[2],p1[1],p[0],p1[0],p[1],s[2]);
else
if((m%4)==0&&newp[q]%newp[j]==0&&c==3&&s[1]%newp[q+1]==0)
printf("(%d%c(%d%c%d))%c%d=%d\n",p[2],p1[1],p[0],p1[0],p[1],p1[2],p[3],s[2]);
else
if((m%4)==0&&newp[j]%newp[q]==0&&c==3&&newp[q+1]%s[1]==0)
printf("%d%c((%d%c%d)%c%d)=%d\n",p[3],p1[2],p[0],p1[0],p[1],p1[1],p[2],s[2]);
else
printf("(((%d%c%d)%c%d)%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s[2]);
}
}
}
if(j==1)
{
if((m%4)==0&&(newp[q]%newp[j]!=0)&&(newp[j]%newp[q]!=0)||((newp[j]==0||newp[q]==0)&&s[0]!=24))
continue;
else
{
if(m%4==0&&newp[q]%newp[j]==0) //满足条件就交换顺序
{
p[2]=newp[q];
p1[1]=sign;
p[3]=newp[j];
}
else
{
p[2]=newp[j];
p1[1]=sign;
p[3]=newp[q];
}
}
for(c=0;c<4;c++)
{
switch(b[c])
{
case 1:s[2]=s[1]+s[0];sign='+';break;
case 2:s[2]=s[1]-s[0];sign='-';break;
case 3:s[2]=s[1]*s[0];sign='*';break;
case 4:s[2]=s[1]/s[0];sign='/';break;
}
if(c==3&&s[1]%s[0]!=0&&s[0]%s[1]!=0||s[0]==0||s[1]==0)
break;
else
if(c==3&&s[0]%s[1]==0)
s[2]=s[0]/s[1];
if(s[2]==24)
{
p1[2]=sign;
if(c==3&&s[0]%s[1]==0) //控制输出顺序和运算优先级
{
printf("(%d%c%d)%c(%d%c%d)=%d\n",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]);
fprintf(fp,"(%d%c%d)%c(%d%c%d)=%d",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]);
}
else
{
printf("(%d%c%d)%c(%d%c%d)=%d\n",p[0],p1[0],p[1],p1[1],p[2],p1[2],p[3],s[2]);
fprintf(fp,"(%d%c%d)%c(%d%c%d)=%d",p[2],p1[2],p[3],p1[1],p[0],p1[0],p[1],s[2]);
}
fclose(fp);
}
}
}
}
}
}
}
}
}
}