2 条题解

  • 1
    @ 2026-9-21 18:53:08

    这里分享一种“简便的手动枚举方法” 不难发现,共有27种解决方案,那么不妨手动枚举27种情况,但是考虑到手写27种可能性的if语句有些麻烦,我们不妨先写一个简单的生成器,有:

    #include <iostream>
    char op(int t) {
        if (t == 0) return '+';
        if (t == 1) return '-';
        return '*';
    }
    int main() {
        bool first = true;
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                for (int k = 0; k < 3; k++) {
                    char o1 = op(i), o2 = op(j), o3 = op(k);
                    // 27 种情况的判断与输出,第一条用 if,其余用 else if
                    std::cout << (first ? "if(" : "else if(");
                    std::cout << 'a' << o1 << 'b' << o2 << 'c' << o3 << "d==24) ";
                    std::cout << "std::cout<<";
                    std::cout << 'a' << "<<" << "\"" << o1 << "\"" << "<<";
                    std::cout << 'b' << "<<" << "\"" << o2 << "\"" << "<<";
                    std::cout << 'c' << "<<" << "\"" << o3 << "\"" << "<<";
                    std::cout << 'd' << "<<std::endl;" << std::endl;
    
                    first = false;
                }
            }
        }
        std::cout << "else std::cout<<-1<<std::endl;" << std::endl;
        return 0;
    }
    
    

    运行,得到:

    if(a+b+c+d==24) std::cout<<a<<"+"<<b<<"+"<<c<<"+"<<d<<std::endl;
    else if(a+b+c-d==24) std::cout<<a<<"+"<<b<<"+"<<c<<"-"<<d<<std::endl;
    else if(a+b+c*d==24) std::cout<<a<<"+"<<b<<"+"<<c<<"*"<<d<<std::endl;
    else if(a+b-c+d==24) std::cout<<a<<"+"<<b<<"-"<<c<<"+"<<d<<std::endl;
    else if(a+b-c-d==24) std::cout<<a<<"+"<<b<<"-"<<c<<"-"<<d<<std::endl;
    else if(a+b-c*d==24) std::cout<<a<<"+"<<b<<"-"<<c<<"*"<<d<<std::endl;
    else if(a+b*c+d==24) std::cout<<a<<"+"<<b<<"*"<<c<<"+"<<d<<std::endl;
    else if(a+b*c-d==24) std::cout<<a<<"+"<<b<<"*"<<c<<"-"<<d<<std::endl;
    else if(a+b*c*d==24) std::cout<<a<<"+"<<b<<"*"<<c<<"*"<<d<<std::endl;
    else if(a-b+c+d==24) std::cout<<a<<"-"<<b<<"+"<<c<<"+"<<d<<std::endl;
    else if(a-b+c-d==24) std::cout<<a<<"-"<<b<<"+"<<c<<"-"<<d<<std::endl;
    else if(a-b+c*d==24) std::cout<<a<<"-"<<b<<"+"<<c<<"*"<<d<<std::endl;
    else if(a-b-c+d==24) std::cout<<a<<"-"<<b<<"-"<<c<<"+"<<d<<std::endl;
    else if(a-b-c-d==24) std::cout<<a<<"-"<<b<<"-"<<c<<"-"<<d<<std::endl;
    else if(a-b-c*d==24) std::cout<<a<<"-"<<b<<"-"<<c<<"*"<<d<<std::endl;
    else if(a-b*c+d==24) std::cout<<a<<"-"<<b<<"*"<<c<<"+"<<d<<std::endl;
    else if(a-b*c-d==24) std::cout<<a<<"-"<<b<<"*"<<c<<"-"<<d<<std::endl;
    else if(a-b*c*d==24) std::cout<<a<<"-"<<b<<"*"<<c<<"*"<<d<<std::endl;
    else if(a*b+c+d==24) std::cout<<a<<"*"<<b<<"+"<<c<<"+"<<d<<std::endl;
    else if(a*b+c-d==24) std::cout<<a<<"*"<<b<<"+"<<c<<"-"<<d<<std::endl;
    else if(a*b+c*d==24) std::cout<<a<<"*"<<b<<"+"<<c<<"*"<<d<<std::endl;
    else if(a*b-c+d==24) std::cout<<a<<"*"<<b<<"-"<<c<<"+"<<d<<std::endl;
    else if(a*b-c-d==24) std::cout<<a<<"*"<<b<<"-"<<c<<"-"<<d<<std::endl;
    else if(a*b-c*d==24) std::cout<<a<<"*"<<b<<"-"<<c<<"*"<<d<<std::endl;
    else if(a*b*c+d==24) std::cout<<a<<"*"<<b<<"*"<<c<<"+"<<d<<std::endl;
    else if(a*b*c-d==24) std::cout<<a<<"*"<<b<<"*"<<c<<"-"<<d<<std::endl;
    else if(a*b*c*d==24) std::cout<<a<<"*"<<b<<"*"<<c<<"*"<<d<<std::endl;
    else std::cout<<-1<<std::endl;
    

    最终的代码:

    #include <iostream>
    int main(){
        int T;
        std::cin>>T;
        for(int i=0;i<T;i++){
            int a,b,c,d;
            std::cin>>a>>b>>c>>d;
            if(a+b+c+d==24) std::cout<<a<<"+"<<b<<"+"<<c<<"+"<<d<<std::endl;
    else if(a+b+c-d==24) std::cout<<a<<"+"<<b<<"+"<<c<<"-"<<d<<std::endl;
    else if(a+b+c*d==24) std::cout<<a<<"+"<<b<<"+"<<c<<"*"<<d<<std::endl;
    else if(a+b-c+d==24) std::cout<<a<<"+"<<b<<"-"<<c<<"+"<<d<<std::endl;
    else if(a+b-c-d==24) std::cout<<a<<"+"<<b<<"-"<<c<<"-"<<d<<std::endl;
    else if(a+b-c*d==24) std::cout<<a<<"+"<<b<<"-"<<c<<"*"<<d<<std::endl;
    else if(a+b*c+d==24) std::cout<<a<<"+"<<b<<"*"<<c<<"+"<<d<<std::endl;
    else if(a+b*c-d==24) std::cout<<a<<"+"<<b<<"*"<<c<<"-"<<d<<std::endl;
    else if(a+b*c*d==24) std::cout<<a<<"+"<<b<<"*"<<c<<"*"<<d<<std::endl;
    else if(a-b+c+d==24) std::cout<<a<<"-"<<b<<"+"<<c<<"+"<<d<<std::endl;
    else if(a-b+c-d==24) std::cout<<a<<"-"<<b<<"+"<<c<<"-"<<d<<std::endl;
    else if(a-b+c*d==24) std::cout<<a<<"-"<<b<<"+"<<c<<"*"<<d<<std::endl;
    else if(a-b-c+d==24) std::cout<<a<<"-"<<b<<"-"<<c<<"+"<<d<<std::endl;
    else if(a-b-c-d==24) std::cout<<a<<"-"<<b<<"-"<<c<<"-"<<d<<std::endl;
    else if(a-b-c*d==24) std::cout<<a<<"-"<<b<<"-"<<c<<"*"<<d<<std::endl;
    else if(a-b*c+d==24) std::cout<<a<<"-"<<b<<"*"<<c<<"+"<<d<<std::endl;
    else if(a-b*c-d==24) std::cout<<a<<"-"<<b<<"*"<<c<<"-"<<d<<std::endl;
    else if(a-b*c*d==24) std::cout<<a<<"-"<<b<<"*"<<c<<"*"<<d<<std::endl;
    else if(a*b+c+d==24) std::cout<<a<<"*"<<b<<"+"<<c<<"+"<<d<<std::endl;
    else if(a*b+c-d==24) std::cout<<a<<"*"<<b<<"+"<<c<<"-"<<d<<std::endl;
    else if(a*b+c*d==24) std::cout<<a<<"*"<<b<<"+"<<c<<"*"<<d<<std::endl;
    else if(a*b-c+d==24) std::cout<<a<<"*"<<b<<"-"<<c<<"+"<<d<<std::endl;
    else if(a*b-c-d==24) std::cout<<a<<"*"<<b<<"-"<<c<<"-"<<d<<std::endl;
    else if(a*b-c*d==24) std::cout<<a<<"*"<<b<<"-"<<c<<"*"<<d<<std::endl;
    else if(a*b*c+d==24) std::cout<<a<<"*"<<b<<"*"<<c<<"+"<<d<<std::endl;
    else if(a*b*c-d==24) std::cout<<a<<"*"<<b<<"*"<<c<<"-"<<d<<std::endl;
    else if(a*b*c*d==24) std::cout<<a<<"*"<<b<<"*"<<c<<"*"<<d<<std::endl;
    else std::cout<<-1<<std::endl;
        }
        return 0;
    }
    

    信息

    ID
    2726
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    21
    已通过
    6
    上传者