列表

详情


XM29. 扑克牌四则运算

描述

现在有一幅扑克牌,去掉大小王52张牌。随机选出4张牌,可以任意改变扑克牌的顺序,并填入 + - * / 四个运算符,不用考虑括号,除法按整数操作,计算过程中没有浮点数,问是否能够求值得到给定的数m。

输入描述

一行四个数字 (JQK 分别被替换成11,12,13)单空格分割,另一行输入 m

输出描述

可以输出1
否则输出0

示例1

输入:

13 13 13 13 
24

输出:

0

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-05-20

#include <stdio.h>
int f(int x,int y,int a)
{
    if(a==1)
        return x+y;
    else if(a==2)
        return x-y;
    else if(a==3)
        return x*y;
    else if(a==4&&y!=0)
        return x/y;
    else if(a==4&&y==0)
        return 100000;
}
int main()
{
    int a,b,c,d,m;
     while(scanf("%d %d %d %d",&a,&b,&c,&d)!=EOF)
     {
         int num[5];
         int flag=0;
         scanf("%d",&m);
         num[1]=a;num[2]=b;num[3]=c;num[4]=d;
         for(int i1=1;i1<5;i1++)
         {
             for(int i2=1;i2<5;i2++)
             {
                 for(int i3=1;i3<5;i3++)
                 {
                     for(int i4=1;i4<5;i4++)
                     {
                         if(i1!=i2 && i1!=i3 && i1!=i4 && i2!=i3 && i2!=i4 && i3!=i4)
                         {
                             for(int s1=1;s1<5;s1++)
                                 for(int s2=1;s2<5;s2++)
                                     for(int s3=1;s3<5;s3++)                                                               
                             {
                                 if(f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==m
                                   ||f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==-m)
                                 {
                                     flag=1;
                                     break;
                                 }
                                 else if(f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==m
                                        ||f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==-m)
                                 {
                                     flag=1;
                                     break;
                                 }
                                 if(flag==1)
                                 break;
                             }
                             if(flag==1)
                                 break;
                         }
                         if(flag==1)
                                 break;
                              
                     }
                     if(flag==1)
                       break;
                 }
                 if(flag==1)
                  break;
             }if(flag==1)
           break;
         }
         if(flag==0)
             printf("0");
         else if(flag==1)
             printf("1");
     }
}

C 解法, 执行用时: 2ms, 内存消耗: 484KB, 提交时间: 2020-07-11

#include <stdio.h>
int f(int x,int y,int a)
{
    if(a==1)
        return x+y;
    else if(a==2)
        return x-y;
    else if(a==3)
        return x*y;
    else if(a==4&&y!=0)
        return x/y;
    else if(a==4&&y==0)
        return 100000;
}
int main()
{
    int a,b,c,d,m;
    int num[5];
    scanf("%d %d %d %d",&num[1],&num[2],&num[3],&num[4]);
    int flag=0;
    scanf("%d",&m);
    for(int i1=1;i1<5;i1++){
        for(int i2=1;i2<5;i2++){
            for(int i3=1;i3<5;i3++){
                for(int i4=1;i4<5;i4++){
                    if(i1!=i2 && i1!=i3 && i1!=i4 && i2!=i3 && i2!=i4 && i3!=i4){
                        for(int s1=1;s1<5;s1++)
                            for(int s2=1;s2<5;s2++)
                                for(int s3=1;s3<5;s3++){
                                    if(f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==m
                                      ||f(f(f(num[i1],num[i2],s1),num[i3],s2),num[i4],s3)==-m){
                                        flag=1;
                                        break;
                                    }
                                    else if(f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==m
                                           ||f(f(num[i1],num[i2],s1),f(num[i3],num[i4],s2),s3)==-m){
                                        flag=1;
                                        break;
                                    }
                                    if(flag==1)
                                        break;
                                }
                        if(flag==1)
                            break;
                    }
                    if(flag==1)
                        break;
                }
                if(flag==1)
                    break;
            }
            if(flag==1)
                break;
        }if(flag==1)
            break;
    }
    if(flag==0)
        printf("0");
    else if(flag==1)
        printf("1");
}

上一题