zoukankan      html  css  js  c++  java
  • CF468A | 24 Game 找规律+打表

    (翻译版本来自 Luogu by lonelysir )

    题目描述

    小X一直很喜欢一个纸牌游戏:“24点”,但最近他发现这个游戏太简单了,所以他发明了一个新游戏。

    你有一个整数序列,包括n个整数:1,2,3,...,n。步骤很简单,你可以从其中拿出两个数,我们假设它们是a和b,将这两个数从序列中删除,并将a+b、a-b或a×b放入这个序列。

    经过n−1次操作后,序列中只会剩下一个数,你能把这个数变成是24吗?

    输入格式

    一行,包括一个数n。 输出格式

    如果可以经过操作计算出24,那么在第一行输出"YES",否则输出"NO"。

    在可以的前提下,接下来的 (n−1) 行中,每行输出一个计算操作,形如 ("a~~op~~b~~=~~c"),a和b表示你选择的数,而(~op~),则是你使用的计算符号(加、减或乘)。算式中 (abs(c)) 不会超过 (|10^8|)

    输出格式

    请注意输出的每个算式的字符与数字之间必须有空格。

    如果你有多种解决的办法,输出任意一个即可

    输入输出样例

    输入 #1

    1

    输出 #1

    NO

    输入 #2

    8

    输出 #2

    YES
    8 * 7 = 56
    6 * 5 = 30
    3 - 4 = -1
    1 - 2 = -1
    30 - -1 = 31
    56 - 31 = 25
    25 + -1 = 24

    ——————————————————————————————————————————
    想着练习一下暴搜搜到的题目,没想到是个规律题233
    如果枚举每一种情况的话复杂度就上天了,于是我们开始挖掘题目的特殊性质。
    注意到给出的(~N~)个整数,分别是(~1、2、3……N~)
    而每连续的四个整数往往可以仅通过加减法组成(~)
    例如,有四个连续整数:(~8,9,10,11~)
    (~10~+~9~-~8~-~11~=~0~)
    于是只要从数列的末尾开始四个四个地消除((0)对答案没有贡献),直到剩余 (4~-~7) 个数
    通过人脑的运算我们可以打表出(N=4、5、6、7)时的答案,然后汇总按照题目规范输出即可
    PS:当(~N=1、2、3~)时无解,输出"(~NO~)"
    辛苦写SPJ的人了

    代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    int n;
    int main() {
    	scanf("%d",&n);
    	if (n==1 || n==2 || n==3) { printf("NO"); return 0; }
    	printf("YES
    ");
    	while (n>=8) {
    		//n n-1 n-2 n-3
    		printf("%d - %d = 1
    ",n,n-1);
    		printf("%d - %d = -1
    ",n-3,n-2);
    		printf("1 + -1 = 0
    ");
    		printf("%d + 0 = %d
    ",n-4,n-4);
    		n-=4;
    	}
    	if (n==4) {
    		printf("1 * 2 = 2
    ");
    		printf("2 * 3 = 6
    ");
    		printf("4 * 6 = 24");
    	}
    	else if (n==5) {
    		printf("3 + 4 = 7
    ");
    		printf("7 + 5 = 12
    ");
    		printf("12 * 2 = 24
    ");
    		printf("24 * 1 = 24");
    	}
    	else if (n==6) {
    		printf("6 - 3 = 3
    ");
    		printf("3 + 4 = 7
    ");
    		printf("7 + 5 = 12
    ");
    		printf("12 * 2 = 24
    ");
    		printf("24 * 1 = 24");
    	}
    	else if (n==7) {
    		printf("7 - 6 = 1
    ");
    		printf("3 + 4 = 7
    ");
    		printf("7 + 5 = 12
    ");
    		printf("12 * 2 = 24
    ");
    		printf("24 * 1 = 24
    ");
    		printf("24 * 1 = 24");
    	}	
    	return 0;
    }
    

    其实好像分奇偶性讨论会更简单

  • 相关阅读:
    Redis面试题(46题)
    公共组件及脚手架webpack模板
    css3中@font-face模块自定义字体
    字段加密实践(django-fernet-fields)
    django导入导出excel实践
    vue-loader和单页组件介绍
    Axios介绍和使用
    微服务架构理解及微服务架构局限性
    v-model的双向数据绑定(表单)
    eureka集群
  • 原文地址:https://www.cnblogs.com/zhwer/p/12194879.html
Copyright © 2011-2022 走看看