1 条题解

  • 0
    @ 2024-12-18 14:07:31

    C++ :

    #include<stdio.h>
    void shuchu3(int a,int b)//输出结合为3的倍数的部分答案 
    {
        int a1=a%3,b1=b%3;
        if(a1==0||b1==0)
        printf("(%d*%d)",a,b); 
        else if(a1==b1)
        printf("(%d-%d)",a,b);
        else
        printf("(%d+%d)",a,b);
    }
    int main()
    {
        printf("yes\n");
        int a[4];
        for(int i=0;i<4;i++)
        scanf("%d",&a[i]);
        int i,j;
        for(i=0;i<4;i++)//检查是否有mod 8相同的余数 
        {
            for(j=i+1;j<4;j++)
            if(a[i]%8==a[j]%8)
            break;
            if(j<4)
            break;
        }
        if(i<4)//有 
        {
            int t1,t2;//找到除mod 8后相同组合以外的两个数的下标
            for(int k=0;k<4;k++)
            if(k!=i&&k!=j)
            {
                t2=t1;
                t1=k;
            }
            printf("(%d-%d)*",a[i],a[j]);
            shuchu3(a[t1],a[t2]);
        }
        else //没有 
        {
            for(i=0;i<4;i++)//检查是否有mod 8余数为0的 
            if(!(a[i]%8))
            break;
            if(i<4) //有 
            {
                int t1,t2,t3;//找到除了mod 8余0的其他三个数的下标 
                for(int k=0;k<4;k++)
                if(k!=i)
                {
                    t3=t2;
                    t2=t1;
                    t1=k;
                }
                printf("(%d*%d)*",a[i],a[t1]); 
                shuchu3(a[t2],a[t3]);
            }
            else //没有
            {
                for(i=0;i<4;i++)//检查是否有相加后mod 8余0的组合 
                {
                    for(j=i+1;j<4;j++)
                    if((a[i]+a[j])%8==0)
                    break;
                    if(j<4)
                    break;
                }
                if(i<4)//有 
                {
                    int t1,t2;
                    for(int k=0;k<4;k++)
                    if(k!=i&&k!=j)
                    {
                        t2=t1;
                        t1=k;
                    }
                    printf("(%d+%d)*",a[i],a[j]);
                    shuchu3(a[t1],a[t2]);
                }
                else //没有
                {
                    int t1,t2,t3,t4;
                    for(i=0;i<4;i++)//获取在mod 8后mod 2余0的组合的下标与其余下标 
                    if((a[i]%8)%2==0)
                    {
                        t2=t1;
                        t1=i;
                    }
                    else
                    {
                        t4=t3;
                        t3=i;
                    }
                    printf("(%d*%d)*",a[t1],a[t2]);
                    shuchu3(a[t3],a[t4]);
                }
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    660
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    提交数
    4
    已通过
    2
    上传者