C语言编程填入运算符

问题描述:输入 5 个数与一个结果,设计程序在 5 个数中填入运算符( + - * /)使其与结果相等,或回答做不到。5个数顺序固定,运算顺序固定为从左向右,不考虑运算符优先性。除法按整数除法来运算,保证有解的输入都是有唯一解的。
输入形式:5个整数a, b, c, d, e和一个结果整数result。0<a,b,c,d,e<=50。
输出形式:依次输出4个运算符,以空格隔开;没有解时输出"No solution"。
如何遍历各种情况呢?一共64种填入可能,如何穷举完全?


#include <stdio.h>
#include <stdbool.h>

char *szOpt[4] = {"+","-","*","/"};

bool inputCheck(char *szName,int iValue)
{
    if(iValue <= 0 || iValue > 50)
    {
        printf("%s is %d,but need to [1,50].\nplease input again\n",szName,iValue);
        return false;
    }
    return true;
}

int calcValue(int iVal1,int iVal2,int iOpt)
{
    switch(iOpt)
    {
        case 0:
            return iVal1 + iVal2;

        case 1:
            return iVal1 - iVal2;

        case 2:
            return iVal1 * iVal2;

        case 3:
            return iVal1 / iVal2;
            
        default:
            break;
    }
    return 0;
}

void printResult(int i,int j,int k,int l)
{
    printf("Opt is:%s %s %s %s\n",szOpt[i],szOpt[j],szOpt[k],szOpt[l]);
}

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;
    int ret = 0;

    while(1)
    {
        scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&ret);
        if(!inputCheck("a",a) || !inputCheck("b",b) || !inputCheck("c",c) 
            || !inputCheck("d",d) || !inputCheck("e",e))
        {
            continue;
        }
        break;
    }

    int i = 0;
    int j = 0;
    int k = 0;
    int l = 0;
    int iCalcBak = 0;
    int iCalc = 0;

    for(i = 0;i < 4;i++)
    {
        int iCalc1 = calcValue(a,b,i);
        for(j = 0;j < 4;j++)
        {
            int iCalc2 = iCalc1;
            iCalc2 = calcValue(iCalc2,c,j);
            for(k = 0;k < 4;k++)
            {
                int iCalc3 = iCalc2;
                iCalc3 = calcValue(iCalc3,d,k);
                for(l = 0;l < 4;l++)
                {
                    int iCalc4 = iCalc3;
                    iCalc4 = calcValue(iCalc4,e,l);
                    if(iCalc4 == ret)
                    {
                        printResult(i,j,k,l);
                        return 0;
                    }
                }
            }
        }
    }

    printf("No solution\n");

    return 0;
}