📄 p006h.cpp
字号:
// + - * / -- -/
// 0 1 2 3 4 5///定义六种符号
#include<stdio.h>
#include<math.h>
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=0;int temp=0;
void main()
{
int i,j,k,t,again,res,flag;
float num[4];
again=1;
while(again==1)
{
printf ("\n Please Enter 4 nums:\n");
time=0;temp=0;
i=0;
flag=0;
while (flag==0)
{
i++;
for(i=0;i<4;i++)
{
scanf("%f",&num[i]);//输入四个数
if (num[i]<1 || num[i]>10|| num[i]!=int(num[i]))
flag++;
}
if(flag!=0)
{
printf ("Error,please 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
time=temp;
printf ("time=%d",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)//判断结果是否为24
{
temp++;
myPrint(1,i,j,k,a,b,c,d);
}
}
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);
}
}
if (k==3)//第三种情况:()/()
{
sum1=myF(i,a,b);
sum2=myF(j,c,d);
if (sum2!=0)
{
sum3=sum1/sum2;
if (fabs(sum3-24)<0.1)
{
temp++;
myPrint(3,i,j,k,a,b,c,d);
}
}
}
if (k==0)//第四种情况:()+()
{
sum1=myF(i,a,b);
sum2=myF(j,c,d);
sum3=sum1+sum2;
if (fabs(sum3-24)<0.1)
{
temp++;
myPrint(4,i,j,k,a,b,c,d);
}
}
if (k==1)//第五种情况:()-()
{
sum1=myF(i,a,b);
sum2=myF(j,c,d);
sum3=sum1-sum2;
if (fabs(sum3-24)<0.1)
{
temp++;
myPrint(5,i,j,k,a,b,c,d);
}
}
}
if (temp==0)
return 0;
else
return 1;
}
float myF(int flag,float m,float n)//四则运算
{
if (flag==0) return (m+n);
if (flag==1) return (m-n); if (flag==2)
return (m*n);
if (flag==3)
if (n==0)
return 20000;
else
return (m/n);
if (flag==4)
return (n-m);
if (flag==5)
if (m==0) return 20000;
else
return (n/m);
return 0;
}
void myPrint(int type,int i,int j,int k,float a,float b,float c,float d)//输出函数 ,按书写习惯输出
{
char sigle[6];
sigle[0]='+';
sigle[1]='-';
sigle[2]='*';
sigle[3]='/';
sigle[4]='-';
sigle[5]='/';
if (type==1)
{
if(j==4 || j==5)
{
if (k==4 || k==5)
printf("%2.0f %c (%2.0f %c (%2.0f %c %2.0f)) =24\n",d,sigle[k],c,sigle[j],a,sigle[i],b);
else
printf("(%2.0f %c (%2.0f %c %2.0f)) %c %2.0f =24\n",c,sigle[j],a,sigle[i],b,sigle[k],d);
}
else
if (k==4 || k==5)
printf("%2.0f %c ((%2.0f %c %2.0f) %c %2.0f) =24\n",d,sigle[k],a,sigle[i],b,sigle[j],c);
else
printf("((%2.0f %c %2.0f) %c %2.0f) %c %2.0f =24\n",a,sigle[i],b,sigle[j],c,sigle[k],d);
}
else
if(j==4 || j==5)
printf("(%2.0f %c %2.0f) %c (%2.0f %c %2.0f) =24\n",a,sigle[i],b,sigle[k],d,sigle[j],c);
else
printf("(%2.0f %c %2.0f) %c (%2.0f %c %2.0f) =24\n",a,sigle[i],b,sigle[k],c,sigle[j],d);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -