一个问题求助玄关
查看原帖
一个问题求助玄关
939292
chenshixue楼主2024/10/3 13:16

为什么第二个样例的最后一个输出是1啊? 我的代码的计算步骤:

0 ! 1 0 | 1 0 ! & & ! &
!0=1---
0|1=1---
!0=1---
1&1=1---
1&1=1---
!1=0---
0&1=0---
0

代码:

#include<bits/stdc++.h>
using namespace std;
int n, m, p, q;
char w;
string s;
stack<int> a;
char b[1000008];
string ss;
int main() {
	getline(cin, s);
	int siz=s.size();
	for (int i = 0; i < siz;i++) {
		if (s[i] == ' ') continue;
		if (s[i] == '!' || s[i] == '&' || s[i] == '|') {
			b[++n] = s[i];
		} else {
			int j=0;
			while(s[j++]!=' '){
				
			}
			i+=j-1;
			b[++n] = '+';
		}
	}
	for(int i=1;i<=n;i++){
		cout<<b[i]<<" ";
	}cout<<endl;
	cin >> p;
	for (int i = 1; i <= p; i++) {
		char o;
		cin >> o;
		for (int i = 1; i <= n; i++) {
			if (b[i] == '+') {
				b[i] = o;
				break;
			}
		}
	}
	for(int i=1;i<=n;i++){
		cout<<b[i]<<" ";
	}cout<<endl;
	cin >> q;
	for (int i = 1; i <= q; i++) {
		int v,u;
		cin>>v;
		int num=0;
		for(int i=0;i<n;i++){
			if(b[i]=='0'||b[i]=='1'){
				num++;
			}
			if(num==v){
				if(b[i]=='0') b[i]='1';
				else b[i]='0';
				u=i;
				break;
			}
		}
		for(int i=1;i<=n;i++){
			cout<<b[i]<<" ";
		}
		cout<<endl;
		for (int i = 1; i <= n; i++) {
			if (b[i] == '0' || b[i] == '1') {
				a.push(b[i] - '0');
			} else {
				if (b[i] == '!') {
					bool t = a.top();
					a.pop();
					a.push(!t);cout<<'!'<<t<<"="<<!(t)<<"---"<<endl;
				} else if (b[i] == '&') {
					bool t1 = a.top();
					a.pop();
					bool t2 = a.top();
					a.pop();
					a.push(t1 && t2);cout<<t1<<"&"<<t2<<"="<<(t1 && t2)<<"---"<<endl;
				} else if (b[i] == '|') {
					bool t1 = a.top();
					a.pop();
					bool t2 = a.top();
					a.pop();
					a.push(t1 || t2);
					cout<<t1<<"|"<<t2<<"="<<(t1 || t2)<<"---"<<endl;
				}
			}
		}
		cout << a.top() << endl;
		if(b[i]=='0') b[u]='1';
		else b[u]='0';
	}

	return 0;
}
2024/10/3 13:16
加载中...