zoukankan      html  css  js  c++  java
  • HDU 5308 I Wanna Become A 24-Point Master(2015多校联合)


    题目链接:戳我

    题目大意:

    给定一个n,则对应一个长度 2n-1 数组,此数组前 n个数全为 n, 最后一个数必须是24,即 第 2n-1 个数是24。
    通过把这n个数加减乘除,每个数都必须用一次,且只能一次,并且运算完的数也都得用一次。也就是做n-1次。
    输出过程 xi ? xj 第 i 个数与第 j 个数做 ? 运算 这种形式

    样例解释:

    4 n = 4 即(a[1]=4,a[2]=4,a[3]=4,a[4]=4)
    1 * 2 表示 (a[5] = a[\1] * a[\2] = 16)
    5 + 3 表示 (a[6] = a[5] + a[3] = 20)
    6 + 4 表示 (a[7] = a[6] + a[4] = 24)
    每个数都用了一次,且是 n - 1 次运算,每次运算的数均用上了

    解题思路:

    官方题解:
    此处输入图片的描述

    代码

    //Author LJH
    //www.cnblogs.com/tenlee
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cctype>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #define clc(a, b) memset(a, b, sizeof(a))
    using namespace std;
    
    const int inf = 0x3f;
    const int INF = 0x3f3f3f3f;
    const int maxn = 1e5+5;
    int n;
    
    void n15()
    {
        int i;
        printf("1 + 2
    ");
        for(i = 1; i < 2; i++)
        {
            printf("%d + %d
    ", n+i, i+2);
        }
        printf("%d / 4
    ", n+2); //n+3 = 3
        printf("5 + 6
    "); // n + 4
        for(i = 7;i <= 12; i++)
        {
            printf("%d + %d
    ", i, n+i-3);
        }
        printf("%d / %d
    ", n+10, 13); //n+11  8
        printf("%d * %d
    ", n+3, n+11); //n+12 3*8
        printf("14 - 15
    ");//n+13
        for(i = n+14; i <= 2*n-2; i++)
        {
            printf("%d * %d
    ", i-n+2, i-1);
        }
        printf("%d + %d
    ", n+12, 2*n-2);
    }
    void n13()
    {
        int i;
        printf("1 + 2
    ");
        for(i = 1; i < 2; i++)
        {
            printf("%d + %d
    ", n+i, i+2);
        }
        printf("%d / 4
    ", n+2); //n+3 = 3
        printf("5 + 6
    "); // n + 4
        for(i = 7;i <= 12; i++)
        {
            printf("%d + %d
    ", i, n+i-3);
        }
        printf("%d / %d
    ", n+10, 13); //n+11  8
        printf("%d * %d
    ", n+3, n+11); //n+12 3*8
    }
    void n14()
    {
        puts("1 + 2"); //15 2*14
        puts("3 / 4"); //16 1
        puts("5 / 6"); //17 1
        puts("16 + 17");//18 2
        puts("7 / 8"); //19 1
        puts("9 / 10"); //20 1
        puts("19 + 20"); //21 2
        puts("18 + 21");//22 4
        puts("15 - 22"); //23 24
        puts("11 - 12");//24 0
        puts("13 - 14"); //25 0
        puts("24 + 25"); //26 0
        puts("26 + 23");// 27
    }
    void n4()
    {
        printf("1 * 2
    "); 
        printf("3 + 5
    "); 
        printf("4 + 6
    "); 
    }
    void n5()
    {
        printf("1 / 2
    "); 
        printf("6 / 3
    "); 
        printf("4 - 7
    "); 
        printf("5 * 8
    "); 
    }
    void n6()
    {
        printf("1 * 2
    "); 
        printf("7 - 3
    "); 
        printf("8 - 4
    "); 
        printf("9 - 5
    "); 
        printf("10 + 6
    "); 
    }
    void n7()
    {
        printf("1 * 2
    "); 
        printf("3 / 4
    "); 
        printf("5 + 6
    "); 
        printf("8 - 9
    "); 
        printf("11 / 10
    "); 
        printf("12 * 7
    "); 
    }
    void n8()
    {
        printf("1 + 2
    "); 
        printf("3 + 9
    "); 
        printf("4 - 5
    "); 
        printf("6 * 11
    "); 
        printf("7 * 12
    ");
        printf("8 * 13
    "); 
        printf("10 + 14
    "); 
    }
    void n9()
    {
        printf("1 + 2
    "); 
        printf("3 + 10
    "); 
        printf("4 / 5
    "); 
        printf("6 / 7
    "); 
        printf("8 / 9
    ");
        printf("11 - 12
    "); 
        printf("15 - 13
    "); 
        printf("16 - 14
    ");
    }
    void n10()
    {
        puts("1 + 2"); //11 20
        puts("3 / 4");//12 1
        puts("5 / 6");// 13 1
        puts("7 / 8");//14 1
        puts("9 / 10");//15 1
        puts("11 + 12");//16 21
        puts("16 + 13");//17 22
        puts("17 + 14");//18 23
        puts("18 + 15");//18 24
    }
    void n11()
    {
        puts("1 + 2"); //12 22
        puts("12 / 3"); //13 2
        puts("4 + 5");//14 22
        puts("14 + 13"); //15 24
        puts("6 - 7");//16 0
        puts("8 - 9"); //17 0
        puts("10 - 11"); // 18 0
        puts("16 * 17");//19
        puts("18 * 19");//20
        puts("20 + 15");//21
        
    }
    void n12()
    {
        puts("1 + 2"); // 13 24
        puts("3 - 4"); // 14
        puts("14 * 5"); //15
        puts("15 * 6"); //16
        puts("16 * 7");//17
        puts("17 * 8");//18
        puts("18 * 9");//19
        puts("19 * 10");//20
        puts("20 * 11");//21
        puts("21 * 12");//22
        puts("22 + 13");//23
    }
    int main()
    {
        while(~scanf("%d", &n))
        {
            if(n < 4)
            {
                puts("-1");
                continue;
            }
            if(n == 4) n4();
            else if(n == 5) n5();
            else if(n == 6) n6();
            else if(n == 7) n7();
            else if(n == 8) n8();
            else if(n == 9) n9();
            else if(n == 10) n10();
            else if(n == 11) n11();
            else if(n == 12) n12();
            else if(n == 13) n13();
            else if(n == 14) n14();
            else
            {
                n15();
            }
        }
    }
    

    标程

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    int n;
    int main(){
    //	freopen("data.in","r",stdin);
    //	freopen("dataa.out","w",stdout);
    	while (scanf("%d",&n)!=EOF){
    		if (n>=15){
    			printf("1 + 2
    "); printf("3 + 4
    "); printf("5 + 6
    "); printf("7 + 8
    "); printf("%d + 9
    ",n+1);
    			printf("%d / 10
    ",n+2); printf("%d / 11
    ",n+3); printf("%d / 12
    ",n+4); printf("%d / 13
    ",n+5);
    			printf("%d * %d
    ",n+6,n+7); printf("%d * %d
    ",n+8,n+9); printf("%d * %d
    ",n+10,n+11); printf("14 - 15
    ");
    			int now=n+13; for (int i=16;i<=n;i++){printf("%d * %d
    ",i,now); now++;} printf("%d + %d
    ",n+12,now); continue;
    		}
    		if (n>=12){
    			printf("1 + 2
    ");
    			for (int i=1;i<=n*2-24;i++) printf("%d / %d
    ",i*2+1,i*2+2); int num=n*4-46;
    			int now=n+1+n*2-24;
    			if (n!=12){
    				printf("%d - %d
    ",n+1,n+2); now++;
    				for (int i=2;i<=n*2-24;i++){printf("%d - %d
    ",now,n+1+i); now++;} 
    			}
    			int k1=now;
    			printf("%d - %d
    ",num+1,num+2); num+=3; now++;
    			for (int i=num;i<=n;i++){printf("%d * %d
    ",i,now); now++;}
    			printf("%d + %d
    ",k1,now); continue;
    		}
    		if (n>=10){
    			printf("1 + 2
    ");
    			for (int i=1;i<=24-n*2;i++) printf("%d / %d
    ",1+2*i,2+2*i);
    			printf("%d + %d
    ",n+1,n+2); int now=n+26-n*2;
    			for (int i=2;i<=24-n*2;i++) {printf("%d + %d
    ",n+1+i,now); now++;}
    			if (n==10) continue;
    			printf("7 - 8
    "); printf("17 * 9
    "); printf("18 * 10
    "); printf("19 * 11
    "); printf("20 + 16
    "); continue;
    		}
    		if (n==9){
    			printf("1 + 2
    "); printf("3 + 10
    "); printf("4 / 5
    "); printf("6 / 7
    "); printf("8 / 9
    ");
    			printf("11 - 12
    "); printf("15 - 13
    "); printf("16 - 14
    "); continue;
    		}
    		if (n==8){
    			printf("1 + 2
    "); printf("3 + 9
    "); printf("4 - 5
    "); printf("6 * 11
    "); printf("7 * 12
    ");
    			printf("8 * 13
    "); printf("10 + 14
    "); continue;
    		}
    		if (n==7){
    			printf("1 * 2
    "); printf("3 / 4
    "); printf("5 + 6
    "); printf("8 - 9
    "); printf("11 / 10
    "); printf("12 * 7
    "); continue;
    		}
    		if (n<=3){printf("-1
    "); continue;}
    		if (n==6){
    			printf("1 * 2
    "); printf("7 - 3
    "); printf("8 - 4
    "); printf("9 - 5
    "); printf("10 + 6
    "); continue;
    		}
    		if (n==5){
    			printf("1 / 2
    "); printf("6 / 3
    "); printf("4 - 7
    "); printf("5 * 8
    "); continue;
    		}
    		if (n==4){
    			printf("1 * 2
    "); printf("3 + 5
    "); printf("4 + 6
    "); continue;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    (转)使用 PyInstaller 把python程序 .py转为 .exe 可执行程序
    (转)使用 python Matplotlib 库绘图
    使用Matplotlib画图系列(一)
    Numpy常用金融计算(一)
    Windows中安装Linux子系统的详细步骤
    Centos7+Postfix+Dovecot实现内网邮件收发 风行天下
    centos7系统防火墙端口转发 风行天下
    Centos7+Postfix+Dovecot实现内网邮件收发
    centos7的路径含有空格Linux命令使用时路径存在空格、特殊符号(如、@等等) 风行天下
    zabbix无法使用Detect operating system [zabbix] 风行天下
  • 原文地址:https://www.cnblogs.com/tenlee/p/4676243.html
Copyright © 2011-2022 走看看