7-3 大家一起来玩游戏 (20 分)

24点是一种益智游戏,24点是把4个整数(一般是正整数)通过加减乘除以及括号运算,使最后的计算结果是24的一个数学游戏,24点可以考验人的智力和数学敏感性,它能在游戏中提高人们的心算能力。
24点通常是使用扑克牌来进行游戏的,一副牌中抽去大小王后还剩下52张(如果初练也可只用1~10这40张牌),任意抽取4张牌(称为牌组),用加、减、乘、除(可加括号)把牌面上的数算成24。每张牌必须只能用一次,如抽出的牌是3、8、8、9,那么算式为(9-8)×8×3或3×8÷(9-8)或(9-8÷8)×3等。比如 1 5 5 5,算式为
5*(5-(1/5));

输入格式:

第一行输入n,表示n组测试数据,后面n行,每一行输入4个1-10的数字。[数字允许重复,测试用例保证无异常数字]

输出格式:

每组测试数据如果可以满足24点,则输出True,否则输出False,空格间隔后输出下一组结果,所有输出只占一行(行末无多余空格)。

输入样例:

2
1 5 5 5
5 1 1 1

输出样例:
True False

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double num[4];
int result=24;
double precision=1e-6;
int test(int n)
{
    int i,j;
    if(n==1)
    {
        if(fabs(num[0]-result)<precision)
            return 1;
        else
            return 0;
    }
    for(i=0; i<n; i++)
        for(j=i+1; j<n; j++)
        {
            double a,b;
            a=num[i];
            b=num[j];
            num[j]=num[n-1];
            num[i]=a+b;
            if(test(n-1))
                return 1;
            num[i]=a-b;
            if(test(n-1))
                return 1;
            num[i]=b-a;
            if(test(n-1))
                return 1;
            num[i]=a*b;
            if(test(n-1))
                return 1;
            num[i]=a/b;
            if(test(n-1))
                return 1;
            num[i]=b/a;
            if(test(n-1))
                return 1;
            num[i]=a;
            num[j]=b;
        }
    return 0;
}
int main()
{
    int flag=0;
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int i;
        for(i=0; i<4; i++)
            scanf("%lf",&num[i]);
        if(!flag)
        {
            if(test(4)==1)
                printf("True");
            else
                printf("False");
            flag=1;
        }
        else
        {
            if(test(4)==1)
                printf(" True");
            else
                printf(" False");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43589396/article/details/88625575