2015年西北工业大学机试第七题

 前面三个输出代表p,q,r的值,第四个表示输出结果

总共有2的n次方种输入

#include<stdio.h>
#include<vector>
#include<string>
#include<iostream>
#include<stack>
using namespace std;
vector<int> d;
vector<vector<int> > change; //变元
void dfs(int n) {
	int i;
	if (d.size() == n) {
		change.push_back(d);
	} else {
		for (i = 0; i < 2; i++) {
			d.push_back(i);
			dfs(n);
			d.pop_back();
		}
	}
}
vector<vector<int> > change_yuan(int n) {
	d.clear();
	change.clear();
	dfs(n);
	return change;
}
int caculate(int op1, int op2, char op) {
	if (op == 'a') {
		return op1*op2;
	}
	if (op == 'o') {
		if (op1 == 0 && op2 == 0)
			return 0;
		return 1;
	}
	if (op == 'i') {
		return caculate(1-op1, op2, 'o');
	}
	if (op == 'e') {
		if (op1 == op2)
			return 1;
		return 0;
	}
}
int main() {
	int i, j, n;
	string input;
	cin>>n>>input;
	change_yuan(n);
	for (i = 0; i < change.size(); i++) {
		stack<int> op_shu;
		for (j = 0; j < input.length(); j++) {
			if (input[j] == 'a' || input[j] == 'o' || input[j] == 'i' || input[j] == 'e') {
				int op2 = op_shu.top();
				op_shu.pop();
				int op1 = op_shu.top();
				op_shu.pop();
				op_shu.push(caculate(op1, op2, input[j]));
			// 非操作是单元运算
			} else if (input[j] == 'n') {
				int x = op_shu.top(); op_shu.pop();
				op_shu.push(1-x);
			}
			else
				op_shu.push(change[i][input[j]-'0']);
		}
		for(j=0;j<change[i].size();j++) printf("%d ", change[i][j]);
		printf("%d\n", op_shu.top());
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值