当前位置: 首页 > article >正文

[表达式]真假计算

题目描述

有一棵树,不一定是二叉树。
所有叶子节点都是 True 或者 False
对于从上往下奇数层的非叶子节点是 and,偶数层非叶子节点为 or
树上每个节点的值是所有孩子节点的值进行该节点的运算操作。
判断一棵树能否砍掉,最快的方法就是从叶子节点一路“与” 和 “或” 到根节点,得到整颗树的真假值后进行决断。

树以简单的括号序列给出:上图可以描述为 ( ( A ( B C ) ) ( D E ) ) ((A(BC))(DE)) ((A(BC))(DE))

输入格式

数据包括若干组,每组数据包含一行一个字符串,输入 ( ) () () 表示结束。

输出格式

每组数据输出一行,包含:数据编号,点,空格,truefalse

样例

样例输入1:

((F(TF))(TF))
(TFT)
((TFT)T)
()

样例输出1

1. false
2. false
3. true

数据范围

对于 10 % 10\% 10% 的数据:每行只包含一对括号;
对于 30 % 30\% 30% 的数据:只有嵌套的括号,没有并列的括号;
对于 100 % 100\% 100% 的数据:测试数据少于 1000 1000 1000 组,字符串长度小于 32000 32000 32000

题解

直接进行递归,记录层数。

  1. 如果当前字符为 (,说明要进入下一层,进行下一层递归。
  2. 如果当前字符为 ),说明当前层结束,返回答案。
  3. 如果当前字符为 TF,计算答案。

判断结束判断字符串是不是 () 即可。

最后注意输入用 getchar,不要用 scanf

int dfs(int y){
	char x = ' ';
	int sum = -1;//答案
	while(x != '\n'){
		x = getchar();
		if(x == '\n'){//下一行
			return sum;
		}
		if(x == '('){
			//递归
			int u = dfs(y + 1);
			//计算答案
			if(sum == -1){
				sum = u;
			}
			else if(y % 2 == 0){
				sum = sum & u;
			}
			else{
				sum = sum | u;
			} 
			continue;
		}
		if(x == ')'){//返回
			return sum;
		}
		//计算答案
		if(sum == -1){
			sum = (x == 'T');
		}
		else if(y % 2 == 0){
			sum = sum & (x == 'T');
		}
		else{
			sum = sum | (x == 'T');
		}
	}
	return sum;
}
int main(){
	int s = 0;//数据编号
	while(1){
		++ s;
		int u = dfs(-1);
		if(u == -1){
			return 0;
		} 
		printf("%d. ", s);
		if(u){
			printf("true\n");
		}
		else{
			printf("false\n");
		}
	}
	return 0;
}

http://www.kler.cn/news/364365.html

相关文章:

  • 跨站脚本攻击XSS以及Cookie如何实现用户管理
  • Lesson10---list
  • 用户账户与授权UAA与OAuth2
  • 【传知代码】智能推荐与隐私保护的融合(论文复现)
  • ASIO网络调试助手之四:浅谈QTcpServer性能
  • Android Studio USB调试真机映射屏幕画面
  • 【黑马Redis原理篇】Redis内存回收
  • reactive中声明ref对象,怎么使用
  • vue-vant框架引入
  • obesi-daemon.log这个日志一直在不断输出?
  • Centos编写mysql备份脚本
  • 好用的vscode内置GPT中文版插件 ,可问答 , 可生成代码! (AI程序员 , 出列 !)
  • 新手向-C接口调用dbus
  • 软件部署-Docker容器化技术(二)
  • (清晰易懂版)(multi)map和set--C++
  • 数据结构~红黑树
  • Linux基础环境搭建(CentOS7)- 安装Scala和Spark
  • webassembly之typescript支持
  • OpenCV系列教程五:图像的分割与修复
  • 代谢组数据分析(二十):通过WGCNA识别核心代谢物
  • 面向对象进阶(下)(JAVA笔记第二十二期)
  • 数据结构(8.2_2)—希尔排序
  • 了解 WebSocket
  • 【格物刊】龙信刊物已上新
  • 【linux开发-驱动】SPI驱动开发相关
  • node和npm