标签:
题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=44
题意:给你n个n,如果能在n-1次运算之后(加减乘除)结果为24的输出n-1次运算的过程,如果不能输出-1。
思路:乍看起来,没什么规律,但是可以想象的是(n+n+n+n)/n=4,(n+n+n+n+n+n)/n=6,(n-n)*n*n*·····*n=0所以在n大于15的时候结果基本是固定的,只要对小于15的数一一输出就行(但是这题真是无语,算这种题目真是累,脑洞啊~~)
代码:
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include <cstring> 5 #include <iostream> 6 #include <queue> 7 #include <algorithm> 8 #include <vector> 9 using namespace std; 10 #define LL __int64 11 12 int main() 13 { 14 int n,i; 15 while(~scanf("%d",&n)) 16 { 17 if(n<4) 18 printf("-1\n"); 19 else if(n==4) 20 { 21 printf("1 * 2\n"); 22 printf("5 + 3\n"); 23 printf("6 + 4\n"); 24 } 25 else if(n==5) 26 { 27 printf("1 / 2\n"); 28 printf("6 / 3\n"); 29 printf("4 - 7\n"); 30 printf("5 * 8\n"); 31 } 32 else if(n==6) 33 { 34 printf("1 + 2\n"); 35 printf("7 + 3\n"); 36 printf("8 + 4\n"); 37 printf("9 + 5\n"); 38 printf("10 - 6\n"); 39 } 40 else if(n==7) 41 { 42 printf("1 / 2\n"); 43 printf("3 * 4\n"); 44 printf("9 - 8\n"); 45 printf("5 + 6\n"); 46 printf("10 / 11\n"); 47 printf("12 * 7\n"); 48 } 49 else if(n==8) 50 { 51 printf("1 - 2\n"); 52 printf("9 * 3\n"); 53 printf("10 * 4\n"); 54 printf("11 * 5\n"); 55 printf("12 + 6\n"); 56 printf("13 + 7\n"); 57 printf("14 + 8\n"); 58 } 59 else if(n==9) 60 { 61 printf("4 / 5\n"); 62 printf("6 / 7\n"); 63 printf("8 / 9\n"); 64 printf("1 + 2\n"); 65 printf("13 + 3\n"); 66 printf("14 - 10\n"); 67 printf("15 - 11\n"); 68 printf("16 - 12\n"); 69 } 70 else if(n==10) 71 { 72 printf("1 / 2\n"); 73 printf("3 / 4\n"); 74 printf("5 / 6\n"); 75 printf("7 / 8\n"); 76 printf("9 + 10\n"); 77 printf("11 + 12\n"); 78 printf("16 + 13\n"); 79 printf("17 + 14\n"); 80 printf("18 + 15\n"); 81 } 82 else if(n==11) 83 { 84 printf("1 + 2\n"); 85 printf("3 / 4\n"); 86 printf("5 / 6\n"); 87 printf("12 + 13\n"); 88 printf("15 + 14\n"); 89 printf("7 - 8\n"); 90 printf("17 * 9\n"); 91 printf("18 * 10\n"); 92 printf("19 * 11\n"); 93 printf("20 + 16\n"); 94 } 95 else if(n==12) 96 { 97 printf("1 + 2\n");//13 98 printf("13 / 3\n");//14 99 printf("14 * 4\n");//15 100 printf("5 - 6\n");//16 101 for(i=7;i<13;i++) 102 printf("%d * %d\n",i,i+9); 103 printf("15 + 22\n"); 104 } 105 else if(n==13) 106 { 107 printf("1 + 2\n");//14 108 printf("14 / 3\n");//15 109 printf("4 / 5\n");//16 110 printf("6 - 16\n");//17 111 printf("15 * 17\n");//18 112 printf("7 - 8\n");//19 113 for(i=9;i<14;i++) 114 printf("%d * %d\n",i,i+10); 115 printf("18 + 24\n"); 116 } 117 118 else if(n==14) 119 { 120 printf("1 / 2\n");//15 121 printf("3 / 4\n");//16 122 printf("5 - 15\n");//17 123 printf("17 - 16\n");//18 124 printf("6 + 7\n");//19 125 printf("19 / 8\n");//20 126 printf("20 * 18\n");//21 127 printf("9 - 10\n");//22 128 for(i=11;i<15;i++) 129 printf("%d * %d\n",i,i+11); 130 printf("21 + 26\n"); 131 } 132 else 133 { 134 printf("1 + 2\n"); 135 printf("3 + 4\n"); 136 printf("5 + 6\n"); 137 printf("7 + 8\n"); 138 printf("%d + 9\n",n+1); 139 printf("%d / 10\n",n+2); 140 printf("%d / 11\n",n+3); 141 printf("%d / 12\n",n+4); 142 printf("%d / 13\n",n+5); 143 printf("%d * %d\n",n+6,n+7); 144 printf("%d * %d\n",n+8,n+9); 145 printf("%d * %d\n",n+10,n+11); 146 printf("14 - 15\n"); 147 int now=n+13; 148 for(i=16;i<=n;i++) 149 { 150 printf("%d * %d\n",i,now); 151 now++; 152 } 153 printf("%d + %d\n",n+12,now); 154 } 155 } 156 return 0; 157 }
hdu 5308 (2015多校第二场第9题)脑洞模拟题,无语
标签:
原文地址:http://www.cnblogs.com/yjx-xx/p/4674337.html