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
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/hdu-5308-i-wanna-become-a-24-point-master/
共有 0 条评论