2015多校第二场1009(构造题)

题目坑就在坑在,输出太蛋疼!

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5308

题意:给n个值为n的数,每个用且用一次,经过+ - * / 得到24,中间得到的结果也可以用,输出每一步所用数字的编号 + 运算符 + 所用数字的编号。

n>=14时,可以发现,5个n得到4,7个n得到6.相乘得24,其余得0.

n<14时,打表。

代码:

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 using namespace std;
  6 void solve(int n)
  7 {
  8         int k=6,kk=7;
  9         int b=n+1;
 10         printf("1 + 2\n");
 11         printf("3 + 4\n");
 12         printf("%d + %d\n",n+1,n+2);
 13         printf("%d / 5\n",n+3);
 14         b=n+5;
 15         for(int i=0;i<3;i++)
 16         {
 17                 printf("%d + %d\n",k,kk);
 18                 k+=2;
 19                 kk+=2;
 20                 b++;
 21         }
 22         printf("%d + %d\n",n+5,n+6);
 23         printf("%d + %d\n",n+7,n+8);
 24         printf("%d / 12\n",n+9);
 25         printf("%d * %d\n",n+10,n+4);
 26         int pos = n+11; //為24的點
 27          b=n+12;
 28         printf("13 - 14\n");
 29         for(int i=15;i<=n;i++)
 30         {
 31                 printf("%d * %d\n",i,b);
 32                 b++;
 33         }
 34         printf("%d + %d\n",b,pos);
 35 }
 36 int main()
 37 {
 38 
 39    int n;
 40    while(cin>>n)
 41    {
 42                 if (n<=3)
 43                 {
 44                         printf("-1\n");
 45                         continue;
 46                 }
 47                 if (n==4)
 48                 {
 49             printf("1 * 2\n");
 50                         printf("3 + 5\n");
 51                         printf("4 + 6\n");
 52                         continue;
 53         }
 54         if (n==5)
 55                 {
 56             printf("1 / 2\n");
 57                         printf("6 / 3\n");
 58                         printf("4 - 7\n");
 59                         printf("5 * 8\n");
 60                         continue;
 61         }
 62                 if (n==6)
 63                 {
 64             printf("1 * 2\n");
 65                         printf("7 - 3\n");
 66                         printf("8 - 4\n");
 67                         printf("9 - 5\n");
 68                         printf("10 + 6\n");
 69                         continue;
 70         }
 71         if (n==7)
 72                 {
 73             printf("1 * 2\n");
 74                         printf("3 / 4\n");
 75                         printf("5 + 6\n");
 76                         printf("8 - 9\n");
 77                         printf("11 / 10\n");
 78                         printf("12 * 7\n");
 79                         continue;
 80         }
 81         if (n==8){
 82             printf("1 + 2\n");
 83             printf("3 + 9\n");
 84             printf("4 - 5\n");
 85             printf("6 * 11\n");
 86             printf("7 * 12\n");
 87             printf("8 * 13\n");
 88             printf("10 + 14\n");
 89             continue;
 90         }
 91                 if (n==9)
 92                 {
 93             printf("1 + 2\n");
 94                         printf("3 + 10\n");
 95                         printf("4 / 5\n");
 96                         printf("6 / 7\n");
 97                         printf("8 / 9\n");
 98             printf("11 - 12\n");
 99             printf("15 - 13\n");
100             printf("16 - 14\n");
101             continue;
102         }
103         if (n==10||n==11){
104             printf("1 + 2\n");
105             for (int i=1;i<=24-n*2;i++) printf("%d / %d\n",1+2*i,2+2*i);
106             printf("%d + %d\n",n+1,n+2); int now=n+26-n*2;
107             for (int i=2;i<=24-n*2;i++) {printf("%d + %d\n",n+1+i,now); now++;}
108             if (n==10) continue;
109             printf("7 - 8\n"); printf("17 * 9\n"); printf("18 * 10\n"); printf("19 * 11\n"); printf("20 + 16\n"); continue;
110         }
111                 if (n==12||n==13){
112             printf("1 + 2\n");
113             for (int i=1;i<=n*2-24;i++) printf("%d / %d\n",i*2+1,i*2+2); int num=n*4-46;
114             int now=n+1+n*2-24;
115             if (n!=12){
116                 printf("%d - %d\n",n+1,n+2); now++;
117                 for (int i=2;i<=n*2-24;i++){printf("%d - %d\n",now,n+1+i); now++;}
118             }
119             int k1=now;
120             printf("%d - %d\n",num+1,num+2); num+=3; now++;
121             for (int i=num;i<=n;i++){printf("%d * %d\n",i,now); now++;}
122             printf("%d + %d\n",k1,now); continue;
123         }
124         if(n>=14)
125                 solve(n);
126    }
127     return 0;
128 }
View Code

 

posted on 2015-07-24 14:42  小松song  阅读(84)  评论(0)    收藏  举报

导航