2018/9/27 离散大作业 根据输入命题输出真值表及主析取(合取)范式

zl老师布置的作业,网上代码都好长,自己写一个才200行

自己写就是很开心,抄代码有什么意思呢

/*
符号注记:
  +    *     -      ->      <->      T     F
合取  析取   非   单条件  双条件   true  false 
 
运用的方法:
1.将中缀表达式转换为后缀表达式便于计算 
2.DFS二进制枚举每个状态并用后缀表达式求值,得到真值表
3.根据真值表打印主析取函数和主合取函数

修改:
1.0 修改增加了条件和双条件符号的判定
2.0 修改了将“T”和“F”也作为命题变元判定的错误

(结尾附样例输入输出) 
*/ 
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stack>
#define go(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define ll long long
#define N 10005
#define MOD 1000000007
using namespace std;

char s[N];
char a[N];
map<ll,int>m;
stack<char> stk;
void workit1(){
	while (!stk.empty()) stk.pop();
	int len=strlen(s), k=0;
	go(i,0,len-1){
		if (s[i]>='A'&&s[i]<='Z'){ 
			a[k++]=s[i];
		}
		else if (s[i]==')'){ 
			while (stk.top()!='('){
				a[k++]=stk.top();
				stk.pop();
			}
			stk.pop();
		}
		else{ 
			if (s[i]=='-'&&s[i]!='>'){
				while (!stk.empty()&&stk.top()=='-'){
					a[k++]=stk.top();
	
  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值