2~10之间的数运算结果仍在2~10

输入一个210之间的正整数,假设输入值为10,则在4个10即如下: 10 10 10 10 之间或之前,任意插入数学运算符:+(加) 、 -(减) 、 *(乘) 、 /(除)、-(负号)、!(阶乘)、√(开平方,即平方根)使得整个式子的值为110。即:假设输入的值为10,则:
10 10 10 10 = 1
10 10 10 10 = 2
10 10 10 10 = 3
10 10 10 10 = 4
10 10 10 10 = 5
10 10 10 10 = 6
10 10 10 10 = 7
10 10 10 10 = 8
10 10 10 10 = 9
10 10 10 10 = 10 只要每一个式子给出一个式子即可。若不存在,则输出该式子无法给成。

给你写了个:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
char op[5] = { '#', '+', '-', '*', '/', };
int n;
float cal(float x, float y, int op)
{
    switch (op)                                    //将运算符初始化为1,2,3,4四个数字
    {
    case 1:return x + y;
    case 2:return x - y;
    case 3:return x*y;
    case 4:return x / y;
    }
}
//对应表达式((AoB)oC)oD
float m1(float i, float j, float k, float t, int op1, int op2, int op3)
{
    float r1, r2, r3;
    r1 = cal(i, j, op1);
    r2 = cal(r1, k, op2);
    r3 = cal(r2, t, op3);
    return r3;
}
//对应表达式(Ao(BoC))oD
float m2(float i, float j, float k, float t, int op1, int op2, int op3)
{
    float r1, r2, r3;
    r1 = cal(j, k, op2);
    r2 = cal(i, r1, op1);
    r3 = cal(r2, t, op3);
    return r3;
}
//对应表达式Ao(Bo(CoD))
float m3(float i, float j, float k, float t, int op1, int op2, int op3)
{
    float r1, r2, r3;
    r1 = cal(k, t, op3);
    r2 = cal(j, r1, op2);
    r3 = cal(i, r2, op1);
    return r3;
}
//对应表达式Ao((BoC)oD)
float m4(float i, float j, float k, float t, int op1, int op2, int op3)
{
    float r1, r2, r3;
    r1 = cal(j, k, op2);
    r2 = cal(r1, t, op3);
    r3 = cal(i, r2, op1);
    return r3;
}
//对应表达式(AoB)o(CoD)
float m5(float i, float j, float k, float t, int op1, int op2, int op3)
{
    float r1, r2, r3;
    r1 = cal(i, j, op1);
    r2 = cal(k, t, op3);
    r3 = cal(r1, r2, op2);
    return r3;
}
int get(int i, int j, int k, int t,int n)
{
    int op1, op2, op3;
    int flag = 0;
    for (op1 = 1; op1 <= 4; op1++){                        //通过一个三重循坏列举了符号的变化情况
        for (op2 = 1; op2 <= 4; op2++){
            for (op3 = 1; op3 <= 4; op3++){
                if (m1(i, j, k, t, op1, op2, op3) == n)
                {
                    printf("((%d%c%d)%c%d)%c%d=%d\n", i, op[op1], j, op[op2], k, op[op3], t,n);
                    flag = 1;
                    break;
                }
                if (m2(i, j, k, t, op1, op2, op3) == n)
                {
                    printf("(%d%c(%d%c%d))%c%d=%d\n", i, op[op1], j, op[op2], k, op[op3], t,n);
                    flag = 1;
                    break;
                }
                if (m3(i, j, k, t, op1, op2, op3) == n)
                {
                    printf("%d%c(%d%c(%d%c%d))=%d\n", i, op[op1], j, op[op2], k, op[op3], t,n);
                    flag = 1;
                    break;
                }
                if (m4(i, j, k, t, op1, op2, op3) == n)
                {
                    printf("%d%c((%d%c%d)%c%d)=%d\n", i, op[op1], j, op[op2], k, op[op3], t,n);
                    flag = 1;
                    break;
                }
                if (m5(i, j, k, t, op1, op2, op3) == n)
                {
                    printf("(%d%c%d)%c(%d%c%d)=%d\n", i, op[op1], j, op[op2], k, op[op3], t,n);
                    flag = 1;
                    break;
                }
            }
            if(flag)
                break;
        }
        if(flag)
                break;
    }
    return flag;
}
int main()
{
    int i, j, k, t,x;
    scanf("%d",&n);
    i =j=k=t=n;
    for(x=1;x<=n;x++){
        get(i, j, k, t,x);
    }
    return 0;
}

img

用穷举法把所有式子都试一遍

利用栈的在计算机中的存储结构,穷举。