[表达式]七个古墓

ops/2024/11/26 21:36:05/

题目描述

塔•拉夏被埋葬在术士峡谷的七个古墓中的一个。

塔•拉夏的古墓一共有七种不同的符号,分别用 A , B , C , D , E , F , G A, B, C, D, E, F, G A,B,C,D,E,F,G 表示。每个古墓中分别封印着一种力量,用 1 , 2 , 3 , 4 , 5 , 6 , 7 1, 2, 3, 4, 5, 6, 7 1,2,3,4,5,6,7 表示。为了防止以后有人取得这些力量,赫拉迪姆将这些对应的关系全部隐藏起来了。

为了获得这七种力量,你终于找到了一点线索:一个古代赫拉迪姆留下的式子。这个式子表示了七种力量对应的关系。经过破译,终于知道将七种符号所表示的力量的代号分别代进式子中,使得等式成立的,就是开启封印的钥匙。

写一个程序解开这个迷题。

输入格式

一行一个字符串,为一个只有变量 A , B , C , D , E , F , G A, B, C, D, E, F, G A,B,C,D,E,F,G 的等式。式子中只含有字母、加、减、乘号以及括号和一个等号,比如 ABC 表示 100 × A + 10 × B + C 100 \times A + 10 \times B+C 100×A+10×B+C,字符串长度不超过 200 200 200

输出格式

一行,输出对应等式的解。如果有多种可能,输出 A B C D E F G ABCDEFG ABCDEFG 表示十进制数最小的一个。输入数据保证有解。

样例

样例输入1:

(A+B)*C-E*(C+D)=FF

样例输出1:

(2+6)*7-1*(7+5)=44

数据范围

字符串长度不超过 200 200 200

题解

先依次枚举 A , B , C , D , E , F , G A, B, C, D, E, F, G A,B,C,D,E,F,G 的值,在等号左右两边进行计算,如果相等,就是答案,输出 A B C D E F G ABCDEFG ABCDEFG 最小的一个即可。

枚举 A , B , C , D , E , F , G A, B, C, D, E, F, G A,B,C,D,E,F,G 的值:

int fl[120], p[120];
int tmp;//记录等号的位置
void ff(int x){if(x > 7){long long ans = dfs(0, tmp - 1);//计算左边的值long long pp = dfs(tmp + 1, l - 1);//计算右边的值if(ans == -1 && pp == -1){//不存在putchar('=');exit(0); }if(ans == pp){//相等fll = 1;dfs(0, tmp - 1);//递归输出左边的表达式putchar('=');dfs(tmp + 1, l - 1); //递归输出右边的表达式exit(0);}}for(int i = 1; i <= 7; ++ i){//从小到大枚举值为 x 的字母if(fl[i]){//已经枚举过continue;}//标记p['A' + x - 1] = i;fl[i] = 1;ff(x + 1);//回溯fl[i] = 0;}
}

计算表达式的值:

int p[120], fl[120];
int d(char x){return p[x];
}
long long isnum(int x, int y){//判断是否完全为字符long long p = 0;//记录字符对应的答案for(int i = x; i <= y; ++ i){if(s[i] >= 'A' && s[i] <= 'G'){p = p * 10 + d(s[i]);}else{return -1;//不是}}return p;
}
int follow(int x, int y){//寻找下一个匹配的括号int t = 0;//记录层数for(int i = x; i <= y; ++ i){if(s[i] == '('){++ t;}else if(s[i] == ')'){-- t;}if(t == 0){return i;//匹配的右括号}}return -1;
}
int f_find(int x, int y){//找优先级最低的int k = -1, t = 0;for(int i = y; i >= x; -- i){//从右往左if(s[i] == '('){++ t;}if(s[i] == ')'){-- t;}if(t == 0 && (s[i] == '+' || s[i] == '-')){//在括号外的加减号,直接计算return i;}if(t == 0 && (s[i] == '*' || s[i] == '/') && (k == -1)){k = i;//记录最先的乘除号}}return k;
}
long long js(long long x, long long y, char z){//计算if(z == '+'){return x + y;}if(z == '-'){return x - y;}if(z == '*'){return x * y;}return x / y;
}
bool fll = 0;//是否输出表达式
long long dfs(int l, int r){if(l > r){//不存在return -1;}long long t = isnum(l, r);if(t != -1){//为变量if(fll){printf("%lld", t);}return t;}if(s[l] == '(' && (follow(l, r) == r)){//左右都是括号if(fll){printf("(");}long long tt = dfs(l + 1, r - 1);if(fll){printf(")");}return tt;}int u = f_find(l, r);//优先级最低的位置long long t1 = dfs(l, u - 1);//左边if(fll){printf("%c", s[u]);}long long t2 = dfs(u + 1, r);//右边return js(t1, t2, s[u]);//计算
}

http://www.ppmy.cn/ops/135935.html

相关文章

40分钟学 Go 语言高并发:开发环境搭建与工程化实践

Day 01 - Go开发环境搭建与工程化实践 1. Go环境变量配置 1.1 重要的环境变量表格 环境变量说明示例值GOROOTGo语言安装根目录Windows: C:\goLinux/Mac: /usr/local/goGOPATH工作目录&#xff0c;包含src、pkg、binWindows: C:\Users\username\goLinux/Mac: ~/goGOBIN可执行…

网络安全之接入控制

身份鉴别 ​ 定义:验证主题真实身份与其所声称的身份是否符合的过程&#xff0c;主体可以是用户、进程、主机。同时也可实现防重放&#xff0c;防假冒。 ​ 分类:单向鉴别、双向鉴别、三向鉴别。 ​ 主题身份标识信息:密钥、用户名和口令、证书和私钥 Internet接入控制过程 …

reactflow 中 useStoreApi 模块作用

1. 状态管理与访问核心功能 它提供了一种方式来访问和操作内部存储&#xff08;store&#xff09;&#xff0c;这个存储包含了与 ReactFlow 应用相关的各种状态&#xff0c;如节点&#xff08;Nodes&#xff09;状态、边&#xff08;Edges&#xff09;状态、视口&#xff08;V…

【C语言】指针常量和常量指针

在C语言中&#xff0c;指针常量和常量指针是两个不同的概念&#xff1a; 指针常量&#xff08;Constant Pointer&#xff09; 定义&#xff1a;指针本身是常量&#xff0c;不能指向其他地址&#xff0c;但指针所指向的内容可以改变。 语法&#xff1a;type *const ptr // 该…

YOLOv11融合针对小目标FFCA-YOPLO中的FEM模块及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《FFCA-YOLO for Small Object Detection in Remote Sensing Images》 一、 模块介绍 论文链接&#xff1a;https://ieeexplore.ieee.org/document/10…

Redis性能优化的18招

前言 Redis在我们的日常开发工作中&#xff0c;使用频率非常高&#xff0c;已经变成了必不可少的技术之一。 Redis的使用场景也很多。 比如&#xff1a;保存用户登录态&#xff0c;做限流&#xff0c;做分布式锁&#xff0c;做缓存提升数据访问速度等等。 那么问题来了&#xf…

【笔记】Android Gradle Plugin配置文件相关说明-libs.versions.toml

版本号 文件路径&#xff1a;Project\gradle\libs.versions.toml 直接搜索versions.agp是找不到的&#xff0c;这是变量引用的写法&#xff0c;查询 agp版本可以直接查版本号。 [versions] agp "8.5.0-alpha08" junit "4.13.2" junitVersion "1.…

SQL SELECT 语句:基础与进阶应用

SQL SELECT 语句&#xff1a;基础与进阶应用 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系数据库的编程语言。在SQL中&#xff0c;SELECT语句是最常用的命令之一&#xff0c;用于从数据库表中检索数据。本文将详细介绍SELECT语句的基础用法&#…