C语言写的24点游戏
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//(1)算24游戏:任意给出4张牌,计算能否用+、-、×、÷将其组合成24。(A)
# include
# include
# include
void main()
{
int option;
void begin(); //申明函数
srand((unsigned)time(NULL)); //随机种子
printf("欢迎进入游戏!");
while(1)
{
printf("输入选项:1开始游戏,0结束游戏\n");
scanf("%d",&option);
if(option==1||option==0) //规范输入
{
if(option==1)
begin();
else
break;
}
else
printf("输入错误,重新输入!\n");
}
printf("谢谢使用这个游戏!");
}
void begin()
{
int k,i,j,x=0,y=0,s1,s2,s3,m,n,c,q,f=0,e,p[4];//p[4]数组存放输出时的四个运算数,s1,s2,s3分别存放运算结果
int a[4],newp[4],b[4]={1,2,3,4};//a[4]数组存放随机生成的四个数
char p1[3],sign; //定义存储运算符的字符数组
printf("四个数是:");
for(i=0;i<4;i++)
{
a[i]=rand()%13+1; //获得随机数
printf("%4d",a[i]);
}
printf("\n");
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:s1=a[i]+a[k];sign='+';break;
case 2:s1=a[i]-a[k];sign='-';break;
case 3:s1=a[i]*a[k];sign='*';break;
case 4:s1=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]=s1;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:s2=newp[j]+newp[q];sign='+';break;
case 2:s2=newp[j]-newp[q];sign='-';break;
case 3:s2=newp[j]*newp[q];sign='*';break;
case 4:s2=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)
s2=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:s3=s2+newp[q+1];sign='+';break;
case 2:s3=s2-newp[q+1];sign='-';break;
case 3:s3=s2*newp[q+1];sign='*';break;
case 4:s3=s2/newp[q+1];sign='/';break;
}
if(c==3&&s2%newp[q+1]!=0&&newp[q+1]%s2!=0||newp[q+1]==0||s2==0)
continue;
else
if(c==3&&newp[q+1]%s2==0)
s3=newp[q+1]/s2;
if(s3==24)
{
p1[2]=sign;
p[3]=newp[q+1];
if((m%4)==0&&newp[q]%newp[j]==0&&c==3&&newp[q+1]%s2==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],s3);
else
if((m%4)==0&&newp[q]%newp[j]==0&&c==3&&s2%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],s3);
else
if((m%4)==0&&newp[j]%newp[q]==0&&c==3&&newp[q+1]%s2==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],s3);
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],s3);
}
}
}
if(j==1)
{
if((m%4)==0&&(newp[q]%newp[j]!=0)&&(newp[j]%newp[q]!=0)||((newp[j]==0||newp[q]==0)&&s1!=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:s3=s2+s1;sign='+';break;
case 2:s3=s2-s1;sign='-';break;
case 3:s3=s2*s1;sign='*';break;
case 4:s3=s2/s1;sign='/';break;
}
if(c==3&&s2%s1!=0&&s1%s2!=0||s1==0||s2==0)
break;
else
if(c==3&&s1%s2==0)
s3=s1/s2;
if(s3==24)
{
p1[2]=sign;
if(c==3&&s1%s2==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],s3);
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],s3);
}
}
}
}
}
}
}
}