24点游戏

来源:互联网 发布:固定区域放大镜软件 编辑:程序博客网 时间:2024/06/07 00:16
/*程序名称:24点游戏
  开发环境:Visual Stdio 6.0
  作者:Smile So Luck
  版本号 2017.4.11.02*/
#include <stdio.h>
#include<stdlib.h>
char biao[4]={'+','-','*','/'},q_biao[64][3];
int shu[4],q_shu[24][4],i,j,k,m=0,n,result;
/*********输入要求解的4个整数*********/
void input_shu()
{
for(i=0;i<4;i++)
{
printf("请输入第%d个数(范围是1~13):",i+1);
scanf("%d",&shu[i]);
while(shu[i]<=0||shu[i]>=14)
{
printf("输入范围不对,请从新输入第%d个数(范围是1~13):",i+1);
scanf("%d",&shu[i]);
}
}
}
/*********生成4个1~13的随机数**********/
void sui_shu()
{
for(i=0;i<4;i++)
{
shu[i]=rand()%13+1;
printf("第%d个数为:%d\n",i+1,shu[i]);
}
}
/*********把运算符号的所有排列方式穷举出来*********/
void Q_biao()
{
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
q_biao[m][0]=biao[i];
q_biao[m][1]=biao[j];
q_biao[m][2]=biao[k];
m++;
}
}
}
}
/********如果有数字重复就加压,以便4个数的穷举********/
void jia()
{
for(i=0;i<4;i++)
{
if(shu[0]==shu[1])shu[0]=shu[0]+10;
if(shu[0]==shu[2])shu[0]=shu[0]+10;
if(shu[0]==shu[3])shu[0]=shu[0]+10;
if(shu[1]==shu[2])shu[1]=shu[1]+10;
if(shu[1]==shu[3])shu[1]=shu[1]+10;
if(shu[2]==shu[3])shu[2]=shu[2]+10;
}
}
/*********穷举所有数的排列方式**********/
void Q_shu()
{
m=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
for(k=0;k<4;k++)
for(n=0;n<4;n++)
if(shu[n]!=shu[k]&&shu[n]!=shu[j]&&shu[n]!=shu[i]&&shu[k]!=shu[j]&&shu[k]!=shu[i]&&shu[j]!=shu[i])
{
q_shu[m][0]=shu[i];
q_shu[m][1]=shu[j];
q_shu[m][2]=shu[k];
q_shu[m][3]=shu[n];
m++;
}
}
}
/**********把上面加压的数解码出来*************/
void jie()
{
for(i=0;i<24;i++)
for(j=0;j<4;j++)
{
if(q_shu[i][j]>30)q_shu[i][j]=q_shu[i][j]-30;
if(q_shu[i][j]>20)q_shu[i][j]=q_shu[i][j]-20;
if(q_shu[i][j]>10)q_shu[i][j]=q_shu[i][j]-10;
}
}
/**********输出所有结果为24的排列***********/
void suan_24()
{
for(i=0;i<24;i++)
{
for(k=0;k<64;k++)
{
result=q_shu[i][0];
for(j=0;j<3;j++)
{
switch(q_biao[k][j])
{
case '+':result=result+q_shu[i][j+1];
break;
case '-':result=result-q_shu[i][j+1];
break;
case '*':result=result*q_shu[i][j+1];
break;
case '/':if(result%q_shu[i][j+1]!=0)result=0;
else result=result/q_shu[i][j+1];
break;
}
}
if(result==24)
printf("%d%c%d%c%d%c%d=24\n",q_shu[i][j-3],q_biao[k][j-3],q_shu[i][j-2],q_biao[k][j-2],q_shu[i][j-1],q_biao[k][j-1],q_shu[i][j]);
}
}
}
void main()
{
int pan;
printf("求解数据请输入:1\n生成随机数请输入:2\n退出请输入:0\n");
scanf("%d",&pan);
while(pan!=0)
{
if(pan==1)
{
input_shu();
jia();
Q_biao();
Q_shu();
jie();
suan_24();
}
else if(pan==2)
{
sui_shu();
printf("输入任意字符对以上4个数求解!");
scanf("%d",&pan);
jia();
Q_biao();
Q_shu();
jie();
suan_24();
}
printf("求解数据请输入:1\n生成随机数请输入:2\n退出请输入:0\n");
scanf("%d",&pan);
}
}
0 0
原创粉丝点击