Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 897 Accepted Submission(s): 379
Special Judge
解题:打表+规律
可以发现当n等于12时,可以求解由
至于其余的数字,假设我们取n = 14 由于得到24,前面n个我们只用到了12个,那么我们可以将13 - 14,然后再加上 24 仍然是24
如果是15 ,我们可以13 - 14,然后差乘以 15 最后积加上24.。。以此类推
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn = 2100; 4 const char str[16][maxn] = { 5 "-1", 6 "-1", 7 "-1", 8 "-1", 9 "1 * 2\n5 + 3\n6 + 4", 10 "1 * 2\n6 * 3\n7 - 4\n8 / 5", 11 "1 + 2\n7 + 3\n8 + 4\n9 + 5\n10 - 6", 12 "1 + 2\n8 + 3\n4 + 5\n10 + 6\n11 / 7\n9 + 12", 13 "1 + 2\n9 + 3\n4 + 5\n11 - 6\n12 - 7\n13 / 8\n10 + 14", 14 "1 + 2\n10 + 3\n4 + 5\n12 + 6\n13 / 7\n11 - 14\n15 - 8\n16 + 9", 15 "1 + 2\n3 + 4\n12 + 5\n13 + 6\n14 / 7\n11 + 15\n8 - 9\n17 / 10\n16 + 18", 16 "1 + 2\n3 + 4\n13 / 5\n12 + 14\n15 - 6\n16 + 7\n17 - 8\n18 + 9\n19 - 10\n20 + 11", 17 "1 + 2\n3 + 13\n4 + 14\n5 + 6\n7 + 16\n8 + 17\n9 + 15\n10 + 19\n18 / 11\n20 / 12\n21 * 22", 18 "1 + 2\n3 + 4\n15 / 5\n14 - 16\n17 - 6\n18 + 7\n19 - 8\n20 + 9\n21 - 10\n22 + 11\n23 - 12\n24 + 13", 19 "1 + 2\n3 + %d\n4 + %d\n5 + 6\n7 + %d\n8 + %d\n9 + %d\n10 + %d\n%d / 11\n%d / 12\n%d * %d\n" 20 }; 21 int main() { 22 int n; 23 while(~scanf("%d",&n)) { 24 if(n <= 13) puts(str[n]); 25 else { 26 printf(str[14],n+1,n+2,n+4,n+5,n+3,n+7,n+6,n+8,n+9,n+10); 27 int last = n + 12; 28 printf("%d - %d\n",13,14); 29 for(int i = 15; i <= n; ++i) 30 printf("%d * %d\n",i,last++); 31 printf("%d + %d\n",n + 11,last); 32 } 33 } 34 return 0; 35 }