@tenlee
2015-08-07T09:18:11.000000Z
字数 4975
阅读 1813
HDUOJ 题解
给定一个n,则对应一个长度
通过把这n个数加减乘除,每个数都必须用一次,且只能一次,并且运算完的数也都得用一次。也就是做n-1次。
输出过程 xi ? xj 第 i 个数与第 j 个数做 ? 运算 这种形式
4 n = 4 即
1 * 2 表示
5 + 3 表示
6 + 4 表示
每个数都用了一次,且是 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\n");for(i = 1; i < 2; i++){printf("%d + %d\n", n+i, i+2);}printf("%d / 4\n", n+2); //n+3 = 3printf("5 + 6\n"); // n + 4for(i = 7;i <= 12; i++){printf("%d + %d\n", i, n+i-3);}printf("%d / %d\n", n+10, 13); //n+11 8printf("%d * %d\n", n+3, n+11); //n+12 3*8printf("14 - 15\n");//n+13for(i = n+14; i <= 2*n-2; i++){printf("%d * %d\n", i-n+2, i-1);}printf("%d + %d\n", n+12, 2*n-2);}void n13(){int i;printf("1 + 2\n");for(i = 1; i < 2; i++){printf("%d + %d\n", n+i, i+2);}printf("%d / 4\n", n+2); //n+3 = 3printf("5 + 6\n"); // n + 4for(i = 7;i <= 12; i++){printf("%d + %d\n", i, n+i-3);}printf("%d / %d\n", n+10, 13); //n+11 8printf("%d * %d\n", n+3, n+11); //n+12 3*8}void n14(){puts("1 + 2"); //15 2*14puts("3 / 4"); //16 1puts("5 / 6"); //17 1puts("16 + 17");//18 2puts("7 / 8"); //19 1puts("9 / 10"); //20 1puts("19 + 20"); //21 2puts("18 + 21");//22 4puts("15 - 22"); //23 24puts("11 - 12");//24 0puts("13 - 14"); //25 0puts("24 + 25"); //26 0puts("26 + 23");// 27}void n4(){printf("1 * 2\n");printf("3 + 5\n");printf("4 + 6\n");}void n5(){printf("1 / 2\n");printf("6 / 3\n");printf("4 - 7\n");printf("5 * 8\n");}void n6(){printf("1 * 2\n");printf("7 - 3\n");printf("8 - 4\n");printf("9 - 5\n");printf("10 + 6\n");}void n7(){printf("1 * 2\n");printf("3 / 4\n");printf("5 + 6\n");printf("8 - 9\n");printf("11 / 10\n");printf("12 * 7\n");}void n8(){printf("1 + 2\n");printf("3 + 9\n");printf("4 - 5\n");printf("6 * 11\n");printf("7 * 12\n");printf("8 * 13\n");printf("10 + 14\n");}void n9(){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");}void n10(){puts("1 + 2"); //11 20puts("3 / 4");//12 1puts("5 / 6");// 13 1puts("7 / 8");//14 1puts("9 / 10");//15 1puts("11 + 12");//16 21puts("16 + 13");//17 22puts("17 + 14");//18 23puts("18 + 15");//18 24}void n11(){puts("1 + 2"); //12 22puts("12 / 3"); //13 2puts("4 + 5");//14 22puts("14 + 13"); //15 24puts("6 - 7");//16 0puts("8 - 9"); //17 0puts("10 - 11"); // 18 0puts("16 * 17");//19puts("18 * 19");//20puts("20 + 15");//21}void n12(){puts("1 + 2"); // 13 24puts("3 - 4"); // 14puts("14 * 5"); //15puts("15 * 6"); //16puts("16 * 7");//17puts("17 * 8");//18puts("18 * 9");//19puts("19 * 10");//20puts("20 * 11");//21puts("21 * 12");//22puts("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\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 (int i=16;i<=n;i++){printf("%d * %d\n",i,now); now++;} printf("%d + %d\n",n+12,now); continue;}if (n>=12){printf("1 + 2\n");for (int i=1;i<=n*2-24;i++) printf("%d / %d\n",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",n+1,n+2); now++;for (int i=2;i<=n*2-24;i++){printf("%d - %d\n",now,n+1+i); now++;}}int k1=now;printf("%d - %d\n",num+1,num+2); num+=3; now++;for (int i=num;i<=n;i++){printf("%d * %d\n",i,now); now++;}printf("%d + %d\n",k1,now); continue;}if (n>=10){printf("1 + 2\n");for (int i=1;i<=24-n*2;i++) printf("%d / %d\n",1+2*i,2+2*i);printf("%d + %d\n",n+1,n+2); int now=n+26-n*2;for (int i=2;i<=24-n*2;i++) {printf("%d + %d\n",n+1+i,now); now++;}if (n==10) continue;printf("7 - 8\n"); printf("17 * 9\n"); printf("18 * 10\n"); printf("19 * 11\n"); printf("20 + 16\n"); continue;}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"); continue;}if (n==8){printf("1 + 2\n"); printf("3 + 9\n"); printf("4 - 5\n"); printf("6 * 11\n"); printf("7 * 12\n");printf("8 * 13\n"); printf("10 + 14\n"); continue;}if (n==7){printf("1 * 2\n"); printf("3 / 4\n"); printf("5 + 6\n"); printf("8 - 9\n"); printf("11 / 10\n"); printf("12 * 7\n"); continue;}if (n<=3){printf("-1\n"); continue;}if (n==6){printf("1 * 2\n"); printf("7 - 3\n"); printf("8 - 4\n"); printf("9 - 5\n"); printf("10 + 6\n"); continue;}if (n==5){printf("1 / 2\n"); printf("6 / 3\n"); printf("4 - 7\n"); printf("5 * 8\n"); continue;}if (n==4){printf("1 * 2\n"); printf("3 + 5\n"); printf("4 + 6\n"); continue;}}return 0;}