题解
2025-12-15 22:00:53
发布于:浙江
35阅读
0回复
0点赞
题目解析
- 输入输出:输入一个由0-3组成的字符串,输出每个数字对应的5x5网格表示形式。
- 数据范围:n的范围是0 ≤ n ≤ 1e6,且n仅由0、1、2、3组成。
- 复杂度要求:时间复杂度为O(5 * len(n)),空间复杂度为O(5 * len(n))。
- 算法知识点:字符串处理、字符映射、二维数组模拟
思路解析
- 构建一个二维数组
v,其中每个数字0-3的表示形式被存储为5行字符串。 - 读取输入字符串
x,逐个处理每个字符。 - 对于每个字符,根据其值确定它在
v中的起始位置(num * 5),然后依次输出该数字对应的5行。 - 每个字符的5行输出后换行,形成完整的5行输出。
完整代码
#include<iostream>
#include<algorithm>
#include<string>
#include <cmath>
#include<vector>
#include<map>
#include<unordered_map>
#include<stack>
#include<queue>
#include<set>
#include<unordered_set>
using namespace std;
#define int long long
#define endl "\n"
#define FOR(i, start, end) for(int i = (start); i <= (end); ++i)
#define FOR_INC(i, start, end, inc) for(int i = (start); i <= (end); i += (inc))
#define REVERSE_FOR(i, start, end) for(int i = (start); i >= (end); --i)
#define FOR_DEC(i, start, end, dec) for(int i = (start); i >= (end); i -= (dec))
#define INF 0x7fffffff
const int ZERO = 0;
const int MOD = 1e9 + 7;
const int N = 5e5 + 10;
void solve() {
// 构建0-3的5x5表示形式
vector<string> v;
v.push_back("....."),v.push_back(".***."),v.push_back(".***."),v.push_back(".***."),v.push_back(".....");
v.push_back("****."),v.push_back("****."),v.push_back("****."),v.push_back("****."),v.push_back("****.");
v.push_back("....."),v.push_back("****."),v.push_back("....."),v.push_back(".****"),v.push_back(".....");
v.push_back("....."),v.push_back("****."),v.push_back("....."),v.push_back("****."),v.push_back(".....");
string x;
cin >> x;
// 输出每个数字的5行表示
FOR(j,0,4) {
FOR(i,0,x.size() - 1) {
int num = x[i] - '0'; // 将字符转换为数字
cout << v[num * 5 + j]; // 根据数字获取对应的行
}
cout << endl; // 每个数字的5行输出后换行
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T = 1;
//cin >> T;
while (T--) solve();
return 0;
}
全部评论 1
头文件可以用这个
#include <bits/stdc++.h>2025-12-17 来自 上海
0




有帮助,赞一个