题解
2026-02-26 13:09:14
发布于:浙江
66阅读
0回复
0点赞
题目解析
- 输入输出:第一行输入一个由数字 组成的字符串(可能包含前导零,需作为字符串处理)。输出 行,每行表示对应行上所有数字的 图案横向拼接结果。
- 数据范围:,且 仅由 组成。最多 位数字( 是 位数)。
- 复杂度要求:设 为数字位数,时间复杂度 ,空间复杂度 (仅需存储固定的 行模板)。
- 算法知识点:
字符串处理、模拟、二维图形的一维化存储、按行扫描输出
思路解析
- 模板预处理:将 四个数字的 点阵图案按"数字优先、行次之"的顺序存入一维数组。具体地,数字 的第 行()存储在索引 处。
- 行列转换输出:由于要求横向拼接多个数字,采用按行扫描策略:外层循环 从 到 遍历图案的每一行,内层循环从左到右遍历输入字符串的每个字符。
- 索引定位:对于第 个字符,将其转换为整数 ,该数字当前应输出的第 行模板位于数组索引 处。
- 格式控制:内层循环将同一行上所有数字的对应图案片段连续输出,每完成一行后输出换行符,形成最终的 行图形。
完整代码
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<string> v;
// 数字0的5行图案(索引0-4)
v.push_back("....."), v.push_back(".***."), v.push_back(".***."), v.push_back(".***."), v.push_back(".....");
// 数字1的5行图案(索引5-9)
v.push_back("****."), v.push_back("****."), v.push_back("****."), v.push_back("****."), v.push_back("****.");
// 数字2的5行图案(索引10-14)
v.push_back("....."), v.push_back("****."), v.push_back("....."), v.push_back(".****"), v.push_back(".....");
// 数字3的5行图案(索引15-19)
v.push_back("....."), v.push_back("****."), v.push_back("....."), v.push_back("****."), v.push_back(".....");
string x;
cin >> x;
// 关键逻辑:按行输出,第j行遍历所有数字
for (int j = 0; j < 5; j++) {
for (int i = 0; i < x.size(); i++) {
int num = x[i] - '0'; // 当前数字转为整数0-3
// 取该数字第j行的模板:基础偏移num*5,加上行号j
cout << v[num * 5 + j];
}
cout << endl; // 每5个数字的一行输出完毕后换行
}
return 0;
}
全部评论 1
头文件可以用这个
#include <bits/stdc++.h>2025-12-17 来自 上海
0




有帮助,赞一个