[ 9.24 ]CF每日一题系列—— 468A构造递推

时间:2021-02-03 13:58:39

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\n3 * 4 = 12\n2 * 12 = 24\n");
}
else
{
printf("4 * 2 = 8\n3 * 5 = 15\n1 + 8 = 9\n9 + 15 = 24\n");
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n <= 3)
printf("NO\n");
else
{
printf("YES\n");
int tim = (n - 4) / 2;
if(n % 2 == 0)
{
print(4);
for(int i = 5;i <= n;i+=2)
{
printf("%d - %d = 1\n",i+1,i);
}
}
else
{
print(5);
for(int i = 6;i <= n;i+=2)
{
printf("%d - %d = 1\n",i+1,i);
}
}
for(int i = 0;i < tim;++i)
{
printf("24 * 1 = 24\n");
}
}
}
return 0;
}