题解
2026-02-26 13:09:14
发布于:浙江
165阅读
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;
}
全部评论 2
这样行吗???
#include<bits/stdc++.h> using namespace std; string zero[6]={".....",".***.",".***.",".***.","....."}; string one[6]={"****.","****.","****.","****.","****."}; string two[6]={".....","****.",".....",".****","....."}; string three[6]={".....","****.",".....","****.","....."}; int main(){ string s; cin>>s; for(int i=0;i<5;i++){ for(int j=0;j<s.size();j++){ if(s[j]==0){ cout<<zero[i]; } if(s[j]==1){ cout<<one[i]; } if(s[j]==2){ cout<<two[i]; } if(s[j]==3){ cout<<three[i]; } } cout<<endl; } return 0; }2026-08-09 来自 福建
0头文件可以用这个
#include <bits/stdc++.h>2025-12-17 来自 上海
0










有帮助,赞一个