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的數一一輸出就行(但是這題真是無語,算這種題目真是累,腦洞啊~~)

代碼:

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <iostream>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
#define LL __int64

int main()
{
    int n,i;
    while(~scanf("%d",&n))
    {
        if(n<4)
            printf("-1\n");
        else if(n==4)
        {
            printf("1 * 2\n");
            printf("5 + 3\n");
            printf("6 + 4\n");
        }
        else if(n==5)
        {
            printf("1 / 2\n");
            printf("6 / 3\n");
            printf("4 - 7\n");
            printf("5 * 8\n");
        }
        else if(n==6)
        {
            printf("1 + 2\n");
            printf("7 + 3\n");
            printf("8 + 4\n");
            printf("9 + 5\n");
            printf("10 - 6\n");
        }
        else 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");
        }
        else 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");
        }
        else 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");
        }
        else 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");
        }
        else 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");
        }
        else if(n==12)
        {
            printf("1 + 2\n");//13
            printf("13 / 3\n");//14
            printf("14 * 4\n");//15
            printf("5 - 6\n");//16
            for(i=7;i<13;i++)
                printf("%d * %d\n",i,i+9);
            printf("15 + 22\n");
        }
        else if(n==13)
        {
            printf("1 + 2\n");//14
            printf("14 / 3\n");//15
            printf("4 / 5\n");//16
            printf("6 - 16\n");//17
            printf("15 * 17\n");//18
            printf("7 - 8\n");//19
            for(i=9;i<14;i++)
                printf("%d * %d\n",i,i+10);
            printf("18 + 24\n");
        }

        else if(n==14)
        {
            printf("1 / 2\n");//15
            printf("3 / 4\n");//16
            printf("5 - 15\n");//17
            printf("17 - 16\n");//18
            printf("6 + 7\n");//19
            printf("19 / 8\n");//20
            printf("20 * 18\n");//21
            printf("9 - 10\n");//22
            for(i=11;i<15;i++)
                printf("%d * %d\n",i,i+11);
            printf("21 + 26\n");
        }
        else
        {
            printf("1 + 2\n");
            printf("3 + 4\n");
            printf("5 + 6\n");
            printf("7 + 8\n");
            printf("%d + 9\n",n+1);
            printf("%d / 10\n",n+2);
            printf("%d / 11\n",n+3);
            printf("%d / 12\n",n+4);
            printf("%d / 13\n",n+5);
            printf("%d * %d\n",n+6,n+7);
            printf("%d * %d\n",n+8,n+9);
            printf("%d * %d\n",n+10,n+11);
            printf("14 - 15\n");
            int now=n+13;
            for(i=16;i<=n;i++)
            {
                printf("%d * %d\n",i,now);
                now++;
            }
            printf("%d + %d\n",n+12,now);
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章