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"); } }
}