能不能帮帮我,会关注的☹
#include <bits/stdc++.h>
using namespace std;
int n,k,len,s,y;
vector<int> xli; //x的可能情况
stack<int> st; //括号栈
set<int> ans; //y的可能情况
char a[1010][1010]; //存储程序
struct node{
bool tp; //0是赋值,1是判断
char op; //记录判断符号
int va; //记录比较值
int ed; //匹配的右括号行数
}p[1010];
int fun(int x){ //计算当x的值为x,y的值
y = 0;
for (int i = 1;i <= n;i++){
if (p[i].tp){
if (p[i].op == '<') if (x >= p[i].va) i = p[i].ed; //不符合直接跳
if (p[i].op == '>') if (x <= p[i].va) i = p[i].ed; //不符合直接跳
}else y = p[i].va; //赋值
}
return y;
}
int main(){
scanf("%d\n",&n);
for (int i = 1;i <= n;i++){
cin >> a[i];
len = strlen(a[i]);
p[i].tp = 0;
p[i].op = '?';
s = 0;
for (int j = 0;j < len;j++){
if (a[i][j] == '<') p[i].op = '<';
if (a[i][j] == '>') p[i].op = '>'; //记录符号
if (a[i][j] == '}'){ //判断右括号
p[i].tp = 1;
int topp = st.top();
st.pop();
p[topp].ed = i; //记录所在行数
break;
}
if (j > 0 && a[i][j - 1] == 'i' && a[i][j] == 'f'){ //判断左括号
p[i].tp = 1;
st.push(i);
}
if (isdigit(a[i][j])) s = s * 10 + a[i][j] - 48; //计算数字
}
p[i].va = s; //存储数字
if (p[i].tp){
if (p[i].op == '<') xli.push_back(s - 1);
else xli.push_back(s + 1);
} //存储x的可能值
}
for (int i = 0;i < xli.size();i++) ans.insert(fun(xli[i])); //计算y的值
set<int>::iterator it;
for (it = ans.begin();it != ans.end();it++) cout << *it <<' '; //输出
return 0;
}