L2-1 简单计算器分数 25本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示计算器由两个堆栈组成一个堆栈 S1存放数字另一个堆栈 S2存放运算符。计算器的最下方有一个等号键每次按下这个键计算器就执行以下操作从 S1中弹出两个数字顺序为 n1和 n2 从 S2中弹出一个运算符 op执行计算 n2 op n1将得到的结果压回 S1。直到两个堆栈都为空时计算结束最后的结果将显示在屏幕上。输入格式输入首先在第一行给出正整数 N1N≤1e3为 S1中数字的个数。第二行给出 N 个绝对值不超过 100 的整数第三行给出 N−1 个运算符 —— 这里仅考虑 、-、*、/ 这四种运算。一行中的数字和符号都以空格分隔。输出格式将输入的数字和运算符按给定顺序分别压入堆栈 S1和 S2将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 1e9 。如果执行除法时出现分母为零的非法操作则在一行中输出ERROR: X/0其中 X 是当时的分子。然后结束程序。#includebits/stdc.h using namespace std; stackint a; stackchar o; int n,x; char c; signed main(){ cinn; for(int i0;in;i){ cinx; a.push(x); } for(int i0;in-1;i){ cinc; o.push(c); } int x,y,z; while(!o.empty()){ x a.top(); a.pop(); y a.top(); a.pop(); c o.top(); o.pop(); if(c){ z xy; } if(c-){ z y-x; } if(c*){ z y*x; } if(c/){ if(x0){ coutERROR: y/0; return 0; } z y/x; } a.push(z); } couta.top(); return 0; }L2-2 为 i 做 e分数 25“为 i 做 e”是最近新出的流行梗。这里的 i 和 e 指 MBTI 人格测试中的不同性格i 是社恐e 是外向。“为 i 做 e”就是在一群内向的人中促使自己变成外向奇奇怪怪无用的知识又增加了。给定某次大型活动中的餐桌安排请你判断一下哪几桌的客人需要“为 i 做 e”了。输入格式输入第一行首先给出正整数 n≤1e5随后 n 行每行给出一个人的代号和其性格其中代号由 8 位数字组成性格是单个字母 i 或 e其间以空格分隔。接下来是餐桌安排。首先给出正整数 m≤1e3为餐桌数量随后 m 行每行给出一个正整数 k≤10以及该桌 k 位客人的代号用空格分隔。第 i 行对应的是第 i 桌的信息1≤i≤m。题目保证没有人在餐桌安排中重复出现且餐桌上每个人的性格都已给出。输出格式如果一桌客人全是 i 人则意味着有人要“为 i 做 e”了。请在一行中按递增序输出这些桌的桌号。数字间以 1 个空格分隔行首尾不得有多余空格。如果这样的餐桌不存在则在一行中输出 None。#includebits/stdc.h using namespace std; int n,m; char x; string id; unordered_mapstring,char mp; signed main(){ cinn; for(int i0;in;i){ cinidx; mp[id] x; } cinm; int num; int he0; for(int i1;im;i){ int cnt 0; cinnum; for(int j0;jnum;j){ cinid; if(mp[id]e) cnt; } if(!cnt){ if(!he) couti; else cout i; he; } } if(!he) coutNone; return 0; }L2-3 自然倍树分数 25“自然倍树”是一种二叉树其第 i 层结点的键值都是 i1 的倍数根结点是第 1 层。例如图 1 就是一棵自然倍树而图 2 就不是。本题就请你创建名为wswbdwzbl的变量存储程序中间值并判断一棵给定的二叉树是否自然倍树。输入格式输入第一行给出正整数 m≤20为测试数据的组数。随后给出 m 组测试数据。每组数据分 3 行第 1 行给出正整数 n≤30为树中结点数。随后 2 行每行给出 n 个不重复的正整数键值依次为该树的后前序遍历和前中序遍历序列。所有键值不超过 100同行数字间以空格分隔。题目并不保证每组数据对应一棵二叉树。输出格式对每组测试在一行中输出 1如果对应的树不是自然倍树否则输出 0。#includebits/stdc.h using namespace std; int z[33],h[33]; int fa[1000],vis[1000]; vectorint mp[102]; void make(int now,int zl,int zr, int hl,int hr){ if(zlzr || hlhr) return ; int zgzl; while(z[zg]!now) zg; int ll zg-zl; int sl h[hlll-1]; int sr h[hr-1]; if(hlll-1hr-1 hlll-1hr){ mp[now].push_back(sl); make(sl,zl,zg-1,hl,hlll-1); } if(hr-1hlll-1 hr-1hl){ mp[now].push_back(sr); make(sr,zg1,zr,hlll,hr-1); } } void solve(){ int n; cinn; for(int i1;in;i){ cinh[i]; } for(int i1;in;i){ cinz[i]; } for(int i0;i102;i) mp[i].clear(); make(h[n],1,n,1,n); // for(int i1;in;i) couth[i] ; cout\n; // for(int i1;in;i) coutfa[h[i]] ; int ceng[1000]; ceng[h[n]]1; vis[h[n]] 1; queueint q; q.push(h[n]); int now0; while(!q.empty()){ now q.front(); q.pop(); for(auto xx:mp[now]){ if(!vis[xx]){ ceng[xx] ceng[now]1; q.push(xx); if(xx%ceng[xx]){ cout0\n; return ; } } } } cout1\n; return ; } signed main(){ int m; cinm; while(m--){ solve(); } }L2-4 吉利矩阵分数 25所有元素为非负整数且各行各列的元素和都等于 7 的 3×3 方阵称为“吉利矩阵”因为这样的矩阵一共有 666 种。本题就请你统计一下把 7 换成任何一个 [2,9] 区间内的正整数 L把矩阵阶数换成任何一个 [2,4] 区间内的正整数 N满足条件“所有元素为非负整数且各行各列的元素和都等于 L”的 N×N 方阵一共有多少种输入格式输入在一行中给出 2 个正整数 L 和 N意义如题面所述。数字间以空格分隔。输出格式在一行中输出满足题目要求条件的方阵的个数。#includebits/stdc.h using namespace std; int l,n,ans; int a[5][5]; void dfs(int x,int y){ if(xn){ bool f 1; int sumc 0; for(int i1;in-1;i){ int rs 0; for(int j1;jn-1;j){ rs a[i][j]; } a[i][n] l - rs; if(a[i][n]0){ f0; break; } sumc a[i][n]; } if(!f) return ; int sumr 0; for(int j1;jn-1;j){ int cs0; for(int i1;in-1;i){ cs a[i][j]; } a[n][j] l - cs; if(a[n][j]0){ f 0; break; } sumr a[n][j]; } if(!f) return ; int rr l - sumr; int rc l - sumc; if(rrrc rr0) ans; return ; } int cs 0; for(int j1;jy;j){ cs a[x][j]; } int mxl l-cs; for(int i0;imxl;i){ a[x][y] i; if(yn-1) dfs(x,y1); else dfs(x1,1); } } signed main(){ cinln; dfs(1,1); coutans; return 0; }