Description:
1 - n个数问你能否经过加减乘除这些运算n -1次的操作得到24
Solutrion:
一开始想暴力递推,发现n的范围太大直接否决,也否决了我的跑dfs,后来就像肯定有个递推规律,然后从1 - n模拟下,1-3直接no,发现4可以了,那么4 6 8 ……都可以了,就是多乘个1而已,但是模拟5的时候一时石乐志,没模拟出来,哎,就是卡脑子了,所以这个题就荣幸的写了博客
Code
/* 写出4 和 5 的构造情况,对于后续的就是多乘个1 */ #include <iostream> #include <cstdio> #include <cstring> using namespace std; void print(int x) { if(x == 4) { printf("1 * 2 = 2 3 * 4 = 12 2 * 12 = 24 "); } else { printf("4 * 2 = 8 3 * 5 = 15 1 + 8 = 9 9 + 15 = 24 "); } } int main() { int n; while(~scanf("%d",&n)) { if(n <= 3) printf("NO "); else { printf("YES "); int tim = (n - 4) / 2; if(n % 2 == 0) { print(4); for(int i = 5;i <= n;i+=2) { printf("%d - %d = 1 ",i+1,i); } } else { print(5); for(int i = 6;i <= n;i+=2) { printf("%d - %d = 1 ",i+1,i); } } for(int i = 0;i < tim;++i) { printf("24 * 1 = 24 "); } } } return 0; }