HDU 5308 I Wanna Become A 24-Point Master 循环(散乱的前缀+循环体)

ProLightsfx 2016-8-9 146 8/9
H - 不是人 循环(散乱的前缀+循环体)

Source

UESTC 2016 Summer Training #14 Div.2

HDU 5308

My Solution

又是

计算的时候是乘进去的, 不然有精度损失

n == 1,显然不能得到24;
n == 2,显然不能得到24;
n == 3,一共有16种运算方法, 都无法得到24;
n == 4,4*4+4+4=24;
n == 5,5*(5-5/5/5)=24;
n == 6,6+6+6+6+6-6=24;
n == 7,(7*7-7/7)/(7+7)*7=24;
n == 8,8+8+8+(8-8)*8*8*8=24;
n == 9,9+9+9-9/9-9/9-9/9=24;
n == 10,10+10+10/10+10/10+10/10+10/10=24;
n == 11,11+11+11/11+11/11+(11-11)*11*11*11=24;
n == 12,(12+12)*(12/12)*(12/12)*(12/12)*(12/12)*(12/12)=24;
n == 13,13+13-13/13-13/13+(13-13)*13*13*13*13*13=24;
n == 14,(14+14-14/14-14/14-14/14-14/14)*(14/14)*(14/14)=24;
n == 15,(15+15)/15*(15+15)/15*(15+15)/15*(15+15+15)/15+(15-15)=24;
n == 16,(16+16)/16*(16+16)/16*(16+16)/16*(16+16+16)/16+(16-16)*16=24;
n == 17,(17+17)/17*(17+17)/17*(17+17)/17*(17+17+17)/17+(17-17)*17*17=24;
n == 18,(18+18)/18*(18+18)/18*(18+18)/18*(18+18+18)/18+(18-18)*18*18*18=24;

到 n == 15的时候规律已经出现了, 已经有足够的n 来凑出 3个 (n + n)/n 和一个 (n + n + n)/n  和一个(n - n )从而有 2 * 2 * 2 * 3 + 0*n*n......*n == 24 故至少15个n

 

#include <iostream>
#include <cstdio>
 
using namespace std;
typedef long long LL;
const int maxn = 1e6 + 8;
 
//(┬_┬) 为什么不能友好的相处, 为什么要相互伤害
//非要搞出个专家系统, 第二次了, 哭, 阅读题最可怕, 专家系统的题第二可怕
 
//上周或是上上周的那个24点的题和这个很像, 也是 循环(散乱的前缀+循环体)
//只是这次的到 15 才开始, 上次的5、6就开始了
int main()
{
    #ifdef LOCAL
    freopen("a.txt", "r", stdin);
    //freopen("b.txt", "w", stdout);
    #endif // LOCAL
    int n;
    while(scanf("%d", &n) != EOF){
        if(n <= 3) printf("-1\n");
        else if(n == 4){
            printf("1 * 2\n3 + 5\n4 + 6\n");
        }
        else if(n == 5){
            printf("1 / 2\n6 / 3\n4 - 7\n5 * 8\n");
        }
        else if(n == 6){
            printf("1 + 2\n");
            printf("3 + 7\n");
            printf("4 + 8\n");
            printf("9 + 5\n");
            printf("10 - 6\n");
        }
        else if(n == 7){
            printf("1 * 2\n");
            printf("3 / 4\n");
            printf("8 - 9\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("4 - 5\n");
            printf("11 * 6\n");
            printf("12 * 7\n");
            printf("13 * 8\n");
            printf("10 + 14\n");
        }
        else if(n == 9){
            printf("1 + 2\n");
            printf("3 + 10\n");
            printf("4 / 5\n");
            printf("6 / 7\n");
            printf("8 / 9\n");
            printf("11 - 12\n");
            printf("15 - 13\n");
            printf("16 - 14\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("7 - 8\n");
            printf("15 * 9\n");
            printf("16 * 10\n");
            printf("17 * 11\n");
            printf("18 + 12\n");
            printf("19 + 13\n");
            printf("20 + 14\n");
        }
        else if(n == 12){
            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("13 * 14\n");
            printf("19 * 15\n");
            printf("20 * 16\n");
            printf("21 * 17\n");
            printf("22 * 18\n");
        }
        else if(n == 13){
            printf("1 + 2\n");
            printf("3 / 4\n");
            printf("5 / 6\n");
            printf("7 - 8\n");
            printf("17 * 9\n");
            printf("18 * 10\n");
            printf("19 * 11\n");
            printf("20 * 12\n");
            printf("21 * 13\n");
            printf("22 + 14\n");
            printf("23 - 15\n");
            printf("24 - 16\n");
        }
        else if(n == 14){
            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("13 / 14\n");
            printf("15 - 16\n");
            printf("22 - 17\n");
            printf("23 - 18\n");
            printf("24 - 19\n");
            printf("25 * 20\n");
            printf("26 * 21\n");
        }
        else if(n >= 15){              //! 2 * 2 * 2 * 3 + (n- n) * n * n ...... * n
            printf("1 + 2\n");
            printf("3 + 4\n");
            printf("5 + 6\n");
            printf("7 + 8\n");
            printf("%d + 9\n", n + 4);
            printf("%d / 10\n", n + 1);
            printf("%d / 11\n", n + 2);
            printf("%d / 12\n", n + 3);
            printf("%d / 13\n", n + 5);
            printf("%d * %d\n", n + 9, n + 6);
            printf("%d * %d\n", n + 10, n + 7);
            printf("%d * %d\n", n + 11, n + 8);
            printf("14 - 15\n");  //get a 0
            //cout<<endl;
            for(int i = 16, j = n + 13; i <= n; i++, j++)
                printf("%d * %d\n", i, j);
            printf("%d + %d\n", n+12, 2*n - 2);
        }
    }
    return 0;
}

 

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -

ProLightsfx

11月15日21:09

最后修改:2024年11月15日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论