⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculate.cpp

📁 这是一个基于symbian操作系统的速算24游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    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 + -