include "stdio.h"
include "stdlib.h"
include "string.h"
//
/**
借鉴了前几个大神的代码, 做了改进
此算法这里覆盖了所有可能, 通过率90%, 但我觉得牛客网测试有问题
比如:
用例:
4 4 2 7
对应输出应该为:
7-424
你的输出为:
7-442
这个用例竟然不对
运算符:+ - * / 4444=64
数字: num1 num2 num3 num4 4321=24
所以每组有64*24=1536中可能,
此算法全部覆盖到, 欢迎大家交流. 哈哈哈
*/
int cal(int b[])
{
char face[14][2]={"0","A","2","3","4","5","6","7","8","9","10","J","Q","K"};
char signal[4]={'+','-','*','/'};
char sign[3]={0};
int i,j,k,m;
float out;
float a[4]={0};
a[0]=(int)b[0];
a[1]=(int)b[1];
a[2]=(int)b[2];
a[3]=(int)b[3];
// printf("%f %f %f %f\n",a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++) //第一个运算符
{
sign[0]=i;
for(j=0;j<4;j++) //第二个运算符
{
sign[1]=j;
for(k=0;k<4;k++) //低三个运算符
{
sign[2]=k;
out=a[0];
for(m=0;m<3;m++)
{
//printf("here1");
if(sign[m]==0)
{
// printf("%f+%f",out,a[m+1]);
out+=a[m+1];
// printf("=%f\n",out);
}
else if(sign[m]==1)
{
// printf("%f-%f",out,a[m+1]);
out-=a[m+1];
// printf("=%f\n",out);
}
else if(sign[m]==2)
{
// printf("%f%f",out,a[m+1]);
out=a[m+1];
// printf("=%f\n",out);
}
else if(sign[m]==3)
{
// printf("%f/%f",out,a[m+1]);
out/=a[m+1];
// printf("=%f\n",out);
}
}
// printf("out:%f\n",out);
if((out-24<0.01) && (out-24>-0.01))
{
printf("%s%c%s%c%s%c%s\n",face[b[0]],signal[sign[0]],face[b[1]],signal[sign[1]],face[b[2]],signal[sign[2]],face[b[3]]);
return 1;
}
}
}
}
return 0;}
int main()
{
int i,j,k,m;
char str[4][5]={0};
int err_flag=0;
int arr[4]={0};
int b[4]={0};
//4 2 K A
start:
while(scanf("%s %s %s %s",&str[0],&str[1],&str[2],&str[3])!=EOF)
{
// printf("%s %s %s %s\n",str[0],str[1],str[2],str[3]);
err_flag=0;
for(i=0;i<4;i++)
{
if(strlen(str[i])>=5)
{
err_flag=1;
break;
}
}
if(err_flag==1)
{
printf("ERROR\n"); //ok
}
else
{
//printf("here1");
for(i=0;i<4;i++)
{
//printf("%s\n",str[i]);
if(strlen(str[i])==2)
{
arr[i]=10;
}
else if(str[i][0]=='J')
{
arr[i]=11;
}
else if(str[i][0]=='Q')
{
arr[i]=12;
}
else if(str[i][0]=='K')
{
// printf("K\n");
arr[i]=13;
}
else if(str[i][0]=='A')
{
arr[i]=1;
}
else if(str[i][0]>='2' && str[i][0]<='9')
{
arr[i]=str[i][0]-'0';
}
}
// printf("%d %d %d %d\n",arr[0],arr[1],arr[2],arr[3]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(j!=i)
{
for(k=0;k<4;k++)
{
if((k!=i) && (k!=j))
{
for(m=0;m<4;m++)
{
if((m!=i) &&(m!=j) &&(m!=k))
{
b[0]=arr[i];
b[1]=arr[j];
b[2]=arr[k];
b[3]=arr[m];
// printf("%d %d %d %d\n",b[i],b[j],b[k],b[m]);
if(cal(b))
{
goto start;
}
}
}
}
}
}
}
}
printf("NONE\n");
}
} }

京公网安备 11010502036488号