📄 calculate.cpp
字号:
int ret = 0;
int id = 0;
int num[24][4],(*pp1)[4],input[4],goal,i,j,k,m,n;
char (*pp2)[3],code[64][3];
answer[id] = 0;
goal = total;
input[0] = p1;
input[1] = p2;
input[2] = p3;
input[3] = p4;
m=0;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
code[m][0]=i;
code[m][1]=j;
code[m][2]=k;
m++;
}
}
}
n=0;
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))
{
m=6-i-j-k;
num[n][0]=input[i];
num[n][1]=input[j];
num[n][2]=input[k];
num[n][3]=input[m];
n++;
}
}
}
}
m=0;
for(i=0,pp1=num;i<24;i++,pp1++)
{
for(j=0,pp2=code;j<64;j++,pp2++)
{
k=get1(pp1,pp2); if (k==goal)
{
m=1; break;
}
k=get2(pp1,pp2); if (k==goal)
{
m=2; break;
}
k=get3(pp1,pp2); if (k==goal)
{
m=3; break;
}
k=get4(pp1,pp2); if (k==goal)
{
m=4; break;
}
k=get5(pp1,pp2); if (k==goal)
{
m=5; break;
}
}
if(m) break;
}
if(m)
{
char analyst[12];
for(i=0;i<3;i++)
{
switch((*pp2)[i])
{
case 0:
(*pp2)[i]='+';
break;
case 1:
(*pp2)[i]='-';
break;
case 2:
(*pp2)[i]='*';
break;
case 3:
(*pp2)[i]='/';
}
}
switch (m)
{ //The following may be hard to understand!
//See how and why to do in the end of the program!
// ( ( a ? b ) ? c ) ? d ?=+,-,*,/
// 0 1 2 3 4 5 6 7 8 9 10
case 1:
strcpy(analyst,"((a?b)?c)?d");
analyst[3]=(*pp2)[0];
analyst[6]=(*pp2)[1];
analyst[9]=(*pp2)[2];
if((analyst[3]=='*')||(analyst[3]=='/')||
(analyst[6]=='+')||(analyst[6]=='-'))
{
analyst[1]='0'; analyst[5]='0';
}
if((analyst[6]=='*')||(analyst[6]=='/')||
(analyst[9]=='+')||(analyst[9]=='-'))
{
analyst[0]='0'; analyst[8]='0';
}
break;
// ( a ? ( b ? c ) ) ? d
// 0 1 2 3 4 5 6 7 8 9 10
case 2:
strcpy(analyst,"(a?(b?c))?d");
analyst[2]=(*pp2)[0];
analyst[5]=(*pp2)[1];
analyst[9]=(*pp2)[2];
if((analyst[2]=='+')||(analyst[2]!='/')&&
((analyst[5]=='*')||(analyst[5]=='/')))
{
analyst[3]='0'; analyst[7]='0';
}
if((analyst[2]=='*')||(analyst[2]=='/')||
(analyst[9]=='+')||(analyst[9]=='-'))
{
analyst[0]='0'; analyst[8]='0';
}
break;
// a ? ( ( b ? c ) ? d )
// 0 1 2 3 4 5 6 7 8 9 10
case 3:
strcpy(analyst,"a?((b?c)?d");
analyst[1]=(*pp2)[0];
analyst[5]=(*pp2)[1];
analyst[8]=(*pp2)[2];
if((analyst[5]=='*')||(analyst[5]=='/')||
(analyst[8]=='+')||(analyst[8]=='-'))
{
analyst[3]='0'; analyst[7]='0';
}
if((analyst[1]=='+')||(analyst[1]!='/')&&
((analyst[8]=='*')||(analyst[8]=='/')))
{
analyst[2]='0'; analyst[10]='0';
}
break;
// a ? ( b ? ( c ? d ) )
// 0 1 2 3 4 5 6 7 8 9 10
case 4:
strcpy(analyst,"a?(b?(c?d))");
analyst[1]=(*pp2)[0];
analyst[4]=(*pp2)[1];
analyst[7]=(*pp2)[2];
if((analyst[4]=='+')||(analyst[4]!='/')&&
((analyst[7]=='*')||(analyst[7]=='/')))
{
analyst[5]='0'; analyst[9]='0';
}
if((analyst[1]=='+')||(analyst[1]!='/')&&
((analyst[4]=='*')||(analyst[4]=='/')))
{
analyst[2]='0'; analyst[10]='0';
}
break;
// ( a ? b ) ? ( c ? d )
// 0 1 2 3 4 5 6 7 8 9 10
case 5:
strcpy(analyst,"(a?b)?(c?d)");
analyst[2]=(*pp2)[0];
analyst[5]=(*pp2)[1];
analyst[8]=(*pp2)[2];
if((analyst[2]=='*')||(analyst[2]=='/')||
(analyst[5]=='+')||(analyst[5]=='-'))
{
analyst[0]='0'; analyst[4]='0';
}
if((analyst[5]=='+')||(analyst[5]!='/')&&
((analyst[8]=='*')||(analyst[8]=='/')))
{
analyst[6]='0'; analyst[10]='0';
}
}
for(i=0;i<11;i++)
{
switch(analyst[i])
{
case 'a':
answer[id++] = '0' + (*pp1)[0];
break;
case 'b':
answer[id++] = '0' + (*pp1)[1];
break;
case 'c':
answer[id++] = '0' + (*pp1)[2];
break;
case 'd':
answer[id++] = '0' + (*pp1)[3];
break;
case '0':
break;
default:
{
answer[id++] = analyst[i];
}
}
}
answer[id] = 0;
}
else
{
for(i=0,pp1=num;i<24;i++,pp1++)
{
j=(*pp1)[0]*(*pp1)[1];
k=(*pp1)[0]*(*pp1)[2];
if(k%(*pp1)[3]==0)
{
k/=(*pp1)[3];
if(j+k==goal)
{
m=1; break;
}
else if(j-k==goal)
{
m=2; break;
}
else if(k-j==goal)
{
m=3; break;
}
}
else
{
j=(*pp1)[0]*(*pp1)[3];
k=(*pp1)[1]*(*pp1)[3];
n=(*pp1)[2];
if((k+n)&&(j%(k+n)==0))
{
if(j/(k+n)==goal)
{
m=4; break;
}
}
else
{
if((k-n)&&(j%(k-n)==0))
{
if(j/(k-n)==goal)
{
m=5; break;
}
else if(j/(n-k)==goal)
{
m=6; break;
}
}
}
}
}
if(!m)
{
ret = -1;
//cout<<"If you get it,please E-mail to:publicfrk@netease.com\n";
//CEikonEnv::Static()->AlertWin(_L("If you get it,please E-mail to:publicfrk@netease.com\n"));
}
else
{
ret = m;
switch (m)
{
case 1:
//cout<<(*pp1)[0]<<"*("<<(*pp1)[1]<<'+'<<(*pp1)[2]<<'/'<<(*pp1)[3]<<')'<<endl;
//RDebug::Print(_L("%d*(%d+%d/%d)"), (*pp1)[0], (*pp1)[1], (*pp1)[2], (*pp1)[3]);
break;
case 2:
//cout<<(*pp1)[0]<<"*("<<(*pp1)[1]<<'-'<<(*pp1)[2]<<'/'<<(*pp1)[3]<<')'<<endl;
//RDebug::Print(_L("%d*(%d-%d/%d)"), (*pp1)[0], (*pp1)[1], (*pp1)[2], (*pp1)[3]);
break;
case 3:
//cout<<(*pp1)[0]<<"*("<<(*pp1)[1]<<'/'<<(*pp1)[2]<<'-'<<(*pp1)[3]<<')'<<endl;
//RDebug::Print(_L("%d*(%d/%d-%d)"), (*pp1)[0], (*pp1)[1], (*pp1)[2], (*pp1)[3]);
break;
case 4:
//cout<<(*pp1)[0]<<"/("<<(*pp1)[1]<<'+'<<(*pp1)[2]<<'/'<<(*pp1)[3]<<')'<<endl;
//RDebug::Print(_L("%d/(%d+%d/%d)"), (*pp1)[0], (*pp1)[1], (*pp1)[2], (*pp1)[3]);
break;
case 5:
//cout<<(*pp1)[0]<<"/("<<(*pp1)[1]<<'-'<<(*pp1)[2]<<'/'<<(*pp1)[3]<<')'<<endl;
//RDebug::Print(_L("%d/(%d-%d/%d)"), (*pp1)[0], (*pp1)[1], (*pp1)[2], (*pp1)[3]);
break;
case 6:
//cout<<(*pp1)[0]<<"/("<<(*pp1)[1]<<'/'<<(*pp1)[2]<<'-'<<(*pp1)[3]<<')'<<endl;
//RDebug::Print(_L("%d/(%d/%d-%d)"), (*pp1)[0], (*pp1)[1], (*pp1)[2], (*pp1)[3]);
break;
}
}
}
return ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -