HDU 5308 I Wanna Become A 24-Point Master(模拟+数论)

201 篇文章 10 订阅
19 篇文章 0 订阅

Description
给出n个数字n,要把所有数字用完,使用+-*/最后变为24,中间运算可以有有浮点数
Input
多组用例,每组一个整数n,以文件尾结束输入
Output
对于每组用例,如果能运算出24点则输出运算过程,否则输出-1
Sample Input
4
Sample Output
1 * 2
5 + 3
6 + 4
Solution
打表。。。
Code

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n<=3)printf("-1\n"); 
        else if(n==4)printf("1 * 2\n5 + 3\n6 + 4\n");
        else if(n==5)printf("1 / 2\n6 / 3\n4 - 7\n5 * 8\n");
        else if(n==6)printf("1 * 2\n7 + 3\n8 - 4\n9 - 5\n10 - 6\n");
        else if(n==7)printf("1 + 2\n8 + 3\n4 + 5\n10 + 6\n11 / 7\n9 + 12\n");
        else if(n==8)printf("1 + 2\n3 + 9\n4 - 5\n6 * 11\n7 * 12\n8 * 13\n10 + 14\n");
        else if(n==9)printf("1 / 2\n3 - 10\n4 / 5\n6 - 12\n7 / 8\n9 - 14\n11 + 13\n16 + 15\n");
        else if(n==10)printf("1 / 2\n3 / 4\n5 + 6\n13 / 7\n11 + 8\n12 + 15\n16 * 14\n17 + 9\n18 - 10\n");
        else if(n==11)printf("1 / 2\n12 + 3\n4 / 5\n7 / 6\n9 / 8\n11 / 10\n14 + 15\n13 * 18\n19 + 16\n20 - 17\n");
        else if(n==12)printf("1 + 2\n13 / 3\n14 * 4\n15 + 5\n16 - 6\n17 + 7\n18 - 8\n19 + 9\n20 - 10\n21 + 11\n22 - 12\n");
        else if(n==13)printf("1 / 2\n3 - 14\n4 / 5\n6 / 7 \n16 + 17\n18 * 15\n19 + 8\n20 - 9\n21 + 10\n22 - 11\n23 + 12\n24 - 13\n");
        else if(n%2)
        {
            printf("1 + 2\n");
            printf("%d + 3\n",n+1);
            printf("4 + 5\n");
            printf("6 + 7\n");
            printf("8 + 9\n");
            printf("10 + 11\n");
            printf("%d + %d\n",n+3,n+4);
            printf("%d + %d\n",n+5,n+6);
            printf("%d + %d\n",n+7,n+8);
            printf("%d / 12\n",n+2);
            printf("%d / 13\n",n+9);
            printf("%d * %d\n",n+10,n+11);
            char c;
            for(int i=13;i<n;i++)
                printf("%d %c %d\n",n+i-1,i%2==0?'-':'+',i+1);
        }
        else if(n%2==0)
        {
            printf("1 + 2\n");
            printf("3 + 4\n");
            printf("5 + 6\n");
            printf("7 + 8\n");
            printf("9 + 10\n");
            printf("%d + %d\n",n+1,n+2);
            printf("%d + %d\n",n+5,n+6);
            printf("%d + %d\n",n+3,n+4);
            printf("%d / 11\n",n+7);
            printf("%d / 12\n",n+8);
            printf("%d * %d\n",n+9,n+10);
            char c;
            for(int i=11;i<n-1;i++)
                printf("%d %c %d\n",n+i,i%2==0?'-':'+',i+2);
        }
    }
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值