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

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;
}

猜你喜欢

转载自www.cnblogs.com/DF-yimeng/p/9697204.html