博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-3295 Tautology 构造法
阅读量:7103 次
发布时间:2019-06-28

本文共 1356 字,大约阅读时间需要 4 分钟。

该题是在给定一系列的计算逻辑的基础上,询问一个表达式是否恒为真的问题,由于构成的表达式是一个以运算符开始的先序遍历的式子,所以可以利用递归进行求解。

什么是构造法呢?  

  1.对所讨论的对象能进行较为直观的描述;

  2.实现的具体性,就是不只是判明某种解的存在性,而且要实现具体求解。

代码如下:

#include 
#include
#include
using namespace std;char s[105];int K[2][2] = {
0, 0, 0, 1}, A[2][2] = {
0, 1, 1, 1};int N[2] = {
1, 0}, C[2][2] = {
1, 1, 0, 1}, E[2][2] = {
1, 0, 0, 1};int pos;bool calc(int &x) // 引用只是为了是为了避免数据的复制 { ++pos; switch (s[pos]) { // 这个括号中的运算有一个先后顺序,所以出现G++(从左至右)能多,但是C++(从右至左)不能过 case 'K': return K[calc(x)][calc(x)]; case 'A': return A[calc(x)][calc(x)]; case 'N': return N[calc(x)]; case 'C': return C[calc(x)][calc(x)]; case 'E': return E[calc(x)][calc(x)]; case 'p': return x & 1; // 分别取到压缩后的字节中的状态即可 case 'q': return x & (1 << 1); case 'r': return x & (1 << 2); case 's': return x & (1 << 3); case 't': return x & (1 << 4); }}int main(){ bool yes; while (scanf("%s", s), s[0] != '0') { yes = true; // 这里的一个for循环顶五个for循环 for(int i = 0; i < 32 && yes; ++i) { pos = -1; if (!calc(i)) { yes = false; } } printf(yes ? "tautology\n" : "not\n"); } return 0; }

 

 

转载于:https://www.cnblogs.com/Lyush/archive/2012/06/29/2570098.html

你可能感兴趣的文章
Asp.net 4.0,首次请求目录下的文件时响应很慢
查看>>
hdu-------(1848)Fibonacci again and again(sg函数版的尼姆博弈)
查看>>
GridView编辑删除操作
查看>>
iOS程序的启动图片图标规范
查看>>
动画 -- 按钮 -- 左右晃动
查看>>
mysql+ssh整合样例,附源代码下载
查看>>
WWF3XOML方式创建和启动工作流 <第十篇>
查看>>
IE6 — 你若安好,便是晴天霹雳 [ 乱弹 ]
查看>>
组合数学 - 母函数的运用 --- 模板题
查看>>
检测MYSQL不同步发邮件通知的脚本
查看>>
Struts2学习笔记1
查看>>
python的ftp上传和下载
查看>>
ASP.NET MVC 中的路由
查看>>
微信公众平台帐号通过昵称无法搜索到怎么办
查看>>
Oracle笔记 六、PL/SQL简单语句块、变量定义
查看>>
Linux 常用命令
查看>>
何为蠕虫病毒
查看>>
[詹兴致矩阵论习题参考解答]习题7.3
查看>>
【BZOJ】1046: [HAOI2007]上升序列(dp)
查看>>
罗兰管弦乐音色表【中英文对照】 ----转载
查看>>