首页 > 学院 > 开发设计 > 正文

HDU 5308

2019-11-06 08:25:46
字体:
来源:转载
供稿:网友

HDU 5308

手工一个个算过去,发现 n=12时,我们可以通过(x+x+x+x)/x*(x+x+x+x+x+x)/x=24,来得到24点。 n=13时,构造(x+x+x)/x*(x+x+x+x +x+x+x+x)/x=24,来得到24点。 当n>13时, 1)n为奇数,我们可以通过一加一减多余的x来使x只剩13个,并应用上方n=13时的式子来得到24点; 2)n为偶数,同理,一加一减消去多余的x,并应用n=12时的式子。 所以我们只用手动算出n<12时的式子即可,当然嫌麻烦也可以写个程序深搜一下。

#include<map>#include<cmath>#include<ctime>#include<cstdio>#include<vector>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<string>#define LL long longusing namespace std;const int maxn=10005;const LL Inf=1e18;int n, m, x, y;void solve(){ if(n<4){ puts("-1"); return; } if(n<12){ if(n==4){ puts("1 * 2"); puts("5 + 3"); puts("6 + 4"); }else if(n==5){ puts("1 / 2"); puts("6 / 3"); puts("4 - 7"); puts("8 * 5"); }else if(n==6){ puts("1 + 2"); puts("7 + 3"); puts("8 + 4"); puts("9 + 5"); puts("10 - 6"); }else if(n==7){ puts("1 + 2"); puts("8 + 3"); puts("9 / 4"); puts("10 + 5"); puts("11 + 6"); puts("12 + 7"); }else if(n==8){ puts("1 + 2"); puts("9 / 3"); puts("4 / 5"); puts("10 + 11"); puts("6 + 7"); puts("13 - 8"); puts("12 * 14"); }else if(n==9){ puts("1 + 2"); puts("10 + 3"); puts("11 / 4"); puts("12 * 5"); puts("6 + 7"); puts("14 + 8"); puts("15 / 9"); puts("13 - 16"); }else if(n==10){ puts("1 + 2"); puts("11 + 3"); puts("4 + 5"); puts("13 + 6"); puts("14 + 7"); puts("15 + 8"); puts("16 + 9"); puts("17 / 10"); puts("12 - 18"); }else if(n==11){ puts("1 + 2"); puts("3 + 4"); puts("13 / 5"); puts("12 + 14"); puts("15 + 6"); puts("16 - 7"); puts("17 + 8"); puts("18 - 9"); puts("19 + 10"); puts("20 - 11"); } return ; } if(n%2){ puts("1 + 2"); PRintf("3 + %d/n",n+1); printf("%d / 4/n",n+2); puts("5 + 6"); printf("7 + %d/n",n+4); printf("8 + %d/n",n+5); printf("9 + %d/n",n+6); printf("10 + %d/n",n+7); printf("11 + %d/n",n+8); printf("12 + %d/n",n+9); printf("%d / 13/n",n+10); printf("%d * %d/n",n+3, n+11); for(int i=n+12,j=14;j<=n;i+=2, j+=2){ printf("%d + %d/n",i, j); printf("%d - %d/n",i+1, j+1); } }else{ puts("1 + 2"); printf("3 + %d/n",n+1); printf("4 + %d/n",n+2); printf("%d / 5/n",n+3); puts("6 + 7"); printf("8 + %d/n",n+5); printf("9 + %d/n",n+6); printf("10 + %d/n",n+7); printf("11 + %d/n",n+8); printf("%d / 12/n",n+9); printf("%d * %d/n",n+4, n+10); for(int i=n+11,j=13;j<=n;i+=2,j+=2){ printf("%d + %d/n",i, j); printf("%d - %d/n",i+1, j+1); } }}int main(){// freopen("matrix.in","r",stdin);//从in.txt中读取数据// freopen("matrix.out","w",stdout);//输出到out.txt文件 while(~scanf("%d",&n)){ solve(); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表