HDU 5308 规律+模拟

给出N个数字N,要把所有数字用完,使用+-*/最后变为24,中间运算可以有有浮点数

对于1-14直接打表

15以上的可以通过13个相同数字得到24,然后使后面的数全部运算为0相加即可

贴一发官方题解

#include "stdio.h"
#include "string.h"

int now;
void pri(int l,int r)
{
    int i;
    printf("%d - %d\n",l,l+1);
    now++;
    for (i=l+2;i<=r;i++)
    {
        printf("%d * %d\n",now,i);
        now++;
    }
}

void make(int l, int r)
{
    printf("1 + 2\n");  // now+1
    printf("4 + 5\n");  // now+2
    printf("7 + 8\n");  // now+3
    printf("10 + 11\n"); // now+4
    printf("%d + 12\n",now+4); // now+5
    printf("%d / 3\n",now+1); // now+6
    printf("%d * %d\n",now+6,now+2); // now+7
    printf("%d / 6\n",now+7); // now+8
    printf("%d * %d\n",now+8,now+3); // now+9
    printf("%d / 9\n",now+9); //now+10;
    printf("%d * %d\n",now+10,now+5); // now+11;
    printf("%d / 13\n",now+11); // now+12;
    now+=12;
}
int main()
{
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        if (n<=3) printf("-1\n");
        if (n==4)
        {
            printf("1 * 2\n");
            printf("5 + 3\n");
            printf("6 + 4\n");
        }
        if (n==5)
        {
            printf("1 / 2\n");
            printf("6 / 3\n");
            printf("4 - 7\n");
            printf("5 * 8\n");
        }
        if (n==6)
        {
            printf("1 + 2\n");
            printf("7 + 3\n");
            printf("8 + 4\n");
            printf("9 + 5\n");
            printf("10 - 6\n");
        }
        if (n==7)
        {
            printf("1 / 2\n");
            printf("3 * 4\n");
            printf("9 - 8\n");
            printf("5 + 6\n");
            printf("10 / 11\n");
            printf("12 * 7\n");
        }
        if (n==8)
        {
            printf("1 - 2\n");
            printf("9 * 3\n");
            printf("10 * 4\n");
            printf("11 * 5\n");
            printf("12 + 6\n");
            printf("13 + 7\n");
            printf("14 + 8\n");
        }
        if (n==9)
        {
            printf("4 / 5\n");
            printf("6 / 7\n");
            printf("8 / 9\n");
            printf("1 + 2\n");
            printf("13 + 3\n");
            printf("14 - 10\n");
            printf("15 - 11\n");
            printf("16 - 12\n");
        }
        if (n==10)
        {
            printf("1 / 2\n");
            printf("3 / 4\n");
            printf("5 / 6\n");
            printf("7 / 8\n");
            printf("9 + 10\n");
            printf("11 + 12\n");
            printf("16 + 13\n");
            printf("17 + 14\n");
            printf("18 + 15\n");
        }
        if (n==11)
        {
            printf("1 + 2\n");
            printf("3 / 4\n");
            printf("5 / 6\n");
            printf("12 + 13\n");
            printf("15 + 14\n");
            printf("7 - 8\n");
            printf("17 * 9\n");
            printf("18 * 10\n");
            printf("19 * 11\n");
            printf("20 + 16\n");
        }
        if (n==12)
        {
            printf("1 + 2\n");
            printf("13 / 3\n");
            printf("14 * 4\n");
            now=15;
            pri(5,12);
            printf("15 + %d\n",now);
        }
        if (n==14)
        {
            printf("1 / 2\n");
            printf("3 / 4\n");
            printf("5 - 15\n");
            printf("17 - 16\n");
            printf("6 + 7\n");
            printf("19 / 8\n");
            printf("20 * 18\n");
            now=21;
            pri(9,14);
            printf("21 + %d\n",now);
        }
        if (n==13 || n>=15)
        {
            now=n;
            make(1,13);
            if (n==13) continue;
            else
            if (n==15)
            {
                printf("14 / 15\n");
                printf("%d * %d\n",now,now+1);
            }
            else
            {
                int mark;
                mark=now;
                pri(14,n);
                printf("%d + %d\n",mark,now);
            }
        }
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-17 17:53:37

HDU 5308 规律+模拟的相关文章

hdu 4964 Emmet(模拟)

题目链接:hdu 4964 Emmet 题目大意: 给定语句,按照语法翻译并输出. 解题思路:用递归模拟文法分析,主要注意几点: 括号并且的情况:(fuck)(you) 括号嵌套的情况:((fuck.you)) 优先输出id,然后是class(题目中有说) 乘法的部分:fuck*2>you*3 (每次执行fuck时,you的地方同样被执行了3次) 其他跑出样例基本没问题,具体看代码. #include <cstdio> #include <cstring> #include

HDU 4891 简单模拟

The Great Pan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1035    Accepted Submission(s): 355 Problem Description As a programming contest addict, Waybl is always happy to take part in vario

hdu 4194(模拟)

符合三者之一的则不满足规定,求不满足规定的个数.直接模拟. 1.被同一个人审查多次 2.被和自己同一组织的审查 3.被审查次数不等于k 代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-06-28 17:36 5 * Filename :

HDU 4903 (模拟+贪心)

Fighting the Landlords Problem Description Fighting the Landlords is a card game which has been a heat for years in China. The game goes with the 54 poker cards for 3 players, where the “Landlord” has 20 cards and the other two (the “Farmers”) have 1

HDU 2100 Lovekey 模拟26进制

Problem Description XYZ-26进制数是一个每位都是大写字母的数字. A.B.C.-.X.Y.Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3-An-1 的每一位代表的数字为a0a1a2a3-an-1 ,则该XYZ-26进制数的10进制值就为 m = a0 * 26^(n-1) + a1 * 26^(n-2) + - + an-3* 26^2 + an-2*26 + an-1 一天vivi忽然玩起了浪漫,要躲在学校

hdu 5308 (2015多校第二场第9题)脑洞模拟题,无语

题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=44 题意:给你n个n,如果能在n-1次运算之后(加减乘除)结果为24的输出n-1次运算的过程,如果不能输出-1. 思路:乍看起来,没什么规律,但是可以想象的是(n+n+n+n)/n=4,(n+n+n+n+n+n)/n=6,(n-n)*n*n*·····*n=0所以在n大于15的时候结果基本是固定的,只要对小于15的数一一输出就行(但是这题真是无语,算这种题目真是累,脑洞啊~~) 代码: 1 #incl

HDU 6121 Build a tree(找规律+模拟)

Build a tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 946    Accepted Submission(s): 369 Problem Description HazelFan wants to build a rooted tree. The tree has n nodes labeled 0 to n−1

[模拟] hdu 5308 I Wanna Become A 24-Point Master

题意: 给你n个数,每个数都是n, 然后把这n个数加减乘除,每个数都必须用一次,且只能一次,并且运算完的数也都得用一次. 也就是做n-1次,问能不能得到24,输出过程 xi ? xj  第i个数与第j个数做?运算 这种形式 思路: 因为n有可能很大,那么肯定需要一种完美的构造 最简单的方法是构造出4*6 构造出4需要5个数,构造出6需要7个数 也就是最少需要12个数,剩下的数就是相减为0,然后乘就好了 但是需要注意的就是13是不满足这个规律的 所以1~13特判一下,14以上的按规律输出就好了~

洛谷 P1014 Cantor表【蛇皮矩阵/找规律/模拟】

题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … … 我们以Z字形给上表的每一项编号.第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入输出格式 输入格式: 整数N(1≤N≤10000000) 输出格式: 表中的第N项 输入输出样例 输入样例#1: 复制 7 输出样例#1: 复