
cpp
#include<iostream>
#include<vector>
using namespace std;
#define LL long long;
int main()
{
int row, col; cin >> row >> col;
vector<vector<int>>arr(row + 5, vector<int>(col + 5));
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin >> arr[i][j];
}
}
int top = 0;
int bottom = row-1;
int left = 0;
int right = col - 1;
while (top <= bottom && left <= right)
{
for (int i = left; i <= right; i++)
{
cout << arr[top][i] << endl;
}
top++;
for (int i = top; i <= bottom; i++)
{
cout << arr[i][right] << endl;
}
right--;
if (top <= bottom)
{
for (int i = right; i >= left; i--)
{
cout << arr[bottom][i] << endl;
}
}
bottom--;
if (left <= right)
{
for (int i = bottom; i >= top; i--)
{
cout << arr[i][left] << endl;
}
}
left++;
}
return 0;
}
思路:环形输出,四个for循环,第一个for是上面的从左到右,第二个是右边从上到下,第三个是底下从右到左,第四个是左边的从下到上,一个圈循环完毕,while里面的条件是保证至少有一列和一行,但是前两个for之后,行和列都减少了一个,不能保证还有,所以后两个循环要加if条件

cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int MOD = 10000;
int main() {
string s;
cin >> s;
vector<long long> st;
long long num = 0;
char last_op = '+';
for (int i = 0; i <= s.size(); ++i) {
if (i < s.size() && isdigit(s[i])) {
num = num * 10 + (s[i] - '0');
num %= MOD;
} else {
if (last_op == '+') {
st.push_back(num);
} else if (last_op == '*') {
long long top = st.back();
st.pop_back();
st.push_back((top * num) % MOD);
}
num = 0;
if (i < s.size()) {
last_op = s[i];
}
}
}
long long ans = 0;
for (int i = 0; i < st.size(); ++i) {
ans = (ans + st[i]) % MOD;
}
cout << ans << endl;
return 0;
}
就是先把所有数字放进栈中,如果有乘法,先乘后入栈,入栈后全部遍历相加,最后取模